| DICTZIP(1) | DICTZIP(1) |
نام (NAME)
dictzip, dictunzip - فشردهسازی (یا باز کردن) فایلها با امکان دسترسی تصادفی
خلاصه دستور (SYNOPSIS)
dictzip [options] name dictunzip [options] name
توضیحات (DESCRIPTION)
برنامهٔ dictzip فایلها را با استفاده از الگوریتم gzip(1) (LZ77) و بهشیوهای که کاملاً با قالب فایل gzip سازگار است، فشرده میکند. یک افزونه برای قالب فایل gzip (فیلد اضافی «Extra Field»، شرح دادهشده در بخش 2.3.1.1 از RFC 1952) امکان ذخیرهٔ دادههای اضافی در سرآیند فایل فشرده را فراهم میکند. برنامههایی مانند gzip و zcat این دادههای اضافی را نادیده خواهند گرفت. با این حال، dictd(8)، کارساز واژهنامه با پروتکل DICT، از این دادهها برای انجام دسترسی شبهتصادفی روی فایل استفاده میکند. فایلها در قالب dictzip باید با پسوند «.dz» خاتمه یابند تا از فایلهای معمولی gzip که فاقد این اطلاعات ویژه در سرآیند هستند، متمایز شوند.
طبق RFC 1952، فیلد اضافی بهصورت زیر مشخص میشود:
+---+---+---+---+==================================+ |SI1|SI2| LEN |... LEN bytes of subfield data ...| +---+---+---+---+==================================+
شناسههای SI1 و SI2 یک شناسهٔ زیرفیلد (subfield ID)، معمولاً دو حرف ASCII با مقداری یادافزا (mnemonic) فراهم میکنند. Jean-Loup Gailly به نشانی <gzip@prep.ai.mit.edu> پایگاه ثبت شناسههای زیرفیلد را نگهداری میکند؛ لطفاً هر شناسهٔ زیرفیلدی را که مایل به استفاده از آن هستید برای او ارسال کنید. شناسههای زیرفیلدی با SI2 = 0 برای کاربردهای آینده رزرو شدهاند.
مقدار LEN طول دادههای زیرفیلد را بدون احتساب ۴ بایت اولیه مشخص میکند.
برنامهٔ dictzip از نویسهٔ 'R' برای SI1 و از نویسهٔ 'A' برای SI2 (کوتاهشدهٔ «Random Access» یا دسترسی تصادفی) استفاده میکند. پس از فیلد LEN، دادهها بهصورت زیر مرتب شدهاند:
+---+---+---+---+---+---+===============================+ | VER | CHLEN | CHCNT | ... CHCNT words of data ... | +---+---+---+---+---+---+===============================+
مطابق با RFC 1952، تمام دادهها بهصورت ابتدا بایت کمارزشتر (least-significant byte first) ذخیره میشوند. برای VER با مقدار 1 دادهها، تمام مقادیر ۱۶ بیتی (۲ بایت) و از نوع عدد صحیح بدون علامت (unsigned integers) هستند.
مقدار XLEN (که پیشتر در سرآیند مشخص شده است) یک عدد صحیح دو بایتی است، بنابراین طول فیلد اضافی میتواند حداکثر 0xffff بایت باشد؛ ۲ بایت از آن برای شناسهٔ زیرفیلد (SI1 و SI2) و ۲ بایت دیگر برای طول زیرفیلد (LEN) استفاده میشود. این امر 0xfffb بایت باقی میگذارد (0x7ffd مدخل ۲ بایتی یا 0x3ffe مدخل ۴ بایتی). با توجه به اینکه بافر خروجی zip باید ۱۰٪ + ۱۲ بایت بزرگتر از بافر ورودی باشد، میتوان ۵۸۹۶۹ بایت بهازای هر مدخل، یا در صورت استفاده از مدخلهای ۲ بایتی، حدود ۱٫۸ گیگابایت را ذخیره کرد. اگر این موضوع به یک عامل محدودکننده تبدیل شود، میتوان نگارش قالب دیگری را برای مدخلهای ۴ بایتی انتخاب و تعریف نمود.
برای فشردهسازی، فایل به «تکهها»یی (chunks) از داده تقسیم میشود؛ هر تکه کمتر از ۶۴ کیلوبایت بوده و میتواند در ناحیهای که آن هم کمتر از ۶۴ کیلوبایت طول دارد فشرده شود (با در نظر گرفتن دادههای فشردهناپذیر - دادهها معمولاً در بلوکی فشرده میشوند که بسیار کوچکتر از اندازهٔ اولیه است). فیلد CHLEN طول یک «تکه» از داده را مشخص میکند. فیلد CHCNT مشخص میکند چه تعداد تکه وجود دارد، و کلمات دادهٔ CHCNT مشخص میکنند که هر تکه پس از فشردهسازی (یعنی در فایل فشردهٔ فعلی) چه طولی دارد.
برای انجام دسترسی تصادفی روی دادهها، آفست (موقعیت) و طول دادهها به توابع کتابخانهای ارائه میشوند. این توابع تکهای را که دادههای مورد نظر در آن آغاز میشود تعیین کرده و آن تکه را از حالت فشرده خارج میکنند. تکههای متوالی در صورت لزوم از حالت فشرده خارج میشوند.
موازنهها (TRADEOFFS)
- سرعت (Speed)
- دسترسی تصادفی واقعی به فایل محقق نمیشود، زیرا هرگونه دسترسی، حتی برای یک بایت منفرد، نیازمند آن است که یک تکهٔ ۶۴ کیلوبایتی خوانده شده و از حالت فشرده خارج شود. این روش کندتر از دسترسی به یک فایل متنی ساده است، اما بسیار، بسیار سریعتر از انجام دسترسی ترتیبی (سریالی) روی یک فایل کاملاً فشردهشده است.
- فضا (Space)
- برای پایگاههای دادهٔ متنی واژهنامه که ما با آنها سر و کار داریم، استفاده از تکههای ۶۴ کیلوبایتی و حداکثر فشردهسازی LZ77 فایلی تولید میکند که تنها حدود ۴٪ بزرگتر از فشردهسازی همان فایل بهصورت یکباره است.
گزینهها (OPTIONS)
- -d یا --decompress
- از حالت فشرده خارج کردن (استخراج). اگر برنامه با نام dictunzip فراخوانی شود، این حالت پیشفرض است.
- -c یا --stdout
- نوشتن خروجی روی خروجی استاندارد؛ بدون تغییر نگه داشتن فایلهای اصلی. این گزینه تنها هنگام خارج کردن از فشردهسازی در دسترس است (زیرا در زمان فشردهسازی، بخشهایی از سرآیند پس از نوشتن باید بهروزرسانی شوند).
- -f یا --force
- اجبار به فشردهسازی یا استخراج، حتی اگر فایل خروجی از پیش وجود داشته باشد.
- -h یا --help
- نمایش راهنما.
- -k یا --keep
- حذف نکردن فایل اصلی.
- -l یا --list
- بهازای هر
فایل
فشرده،
فیلدهای
زیر را
فهرست
میکند:
type: dzip، gzip یا text (شامل فایلهایی با قالبهای ناشناخته)
crc: چکسام CRC
date and time: تاریخ و زمان از سرآیند
chunks: تعداد تکهها در فایل
size: اندازهٔ هر تکه در حالت غیرفشرده
compr.: اندازهٔ فشرده
uncompr.: اندازهٔ غیرفشرده
ratio: نسبت فشردهسازی (0.0% در صورت نامشخص بودن)
name: نام فایل غیرفشردهبرخلاف gzip، روش فشردهسازی شناسایی نمیشود.
- -L یا --license
- نمایش مجوز dictzip و خروج.
- -t یا --test
- بررسی صحت و سلامت فایل فشرده. این گزینه پیادهسازی نشده است؛ در عوض، اطلاعات سرآیند را فهرست میکند.
- -v یا --verbose
- حالت پرگو. نمایش اطلاعات اضافی در حین فشردهسازی.
- -V یا --version
- نگارش. نمایش شمارهٔ نگارش و گزینههای زمان ساخت، سپس خروج.
- -s start یا --start start
- تعیین آفست برای شروع استخراج، با استفاده از اعداد دهدهی. مقدار پیشفرض ابتدای فایل است.
- -e size یا --size size
- تعیین اندازهٔ بخشی از فایل برای خارج کردن از حالت فشرده، با استفاده از اعداد دهدهی. مقدار پیشفرض کل فایل است.
- -S start یا --Start start
- تعیین آفست برای شروع استخراج، با استفاده از اعداد در مبنای ۶۴ (base64). مقدار پیشفرض ابتدای فایل است.
- -E size یا --Size start
- تعیین اندازهٔ بخشی از فایل برای خارج کردن از حالت فشرده، با استفاده از اعداد در مبنای ۶۴ (base64). مقدار پیشفرض کل فایل است.
- -p prefilter یا --pre prefilter
- تعیین یک فرمان شل برای اجرا بهعنوان پالایه پیش از فشردهسازی یا استخراج یک تکه. پالایههای پیش و پس از فشردهسازی را میتوان برای فراهم آوردن فشردهسازی بیشتر یا قالببندی خروجی به کار برد. پالایهها نباید اندازهٔ بافر را بهمیزان چشمگیری افزایش دهند. پالایههای پیش و پس از فشردهسازی برای ارائهٔ عمومیترین رابط ممکن طراحی شدهاند.
- -P postfilter یا --post postfilter
- تعیین یک فرمان شل برای اجرا بهعنوان پالایه پس از فشردهسازی یا استخراج.
قدردانیها (CREDITS)
برنامهٔ dictzip توسط Rik Faith (faith@cs.unc.edu) نوشته شده است و تحت شرایط مجوز همگانی عمومی گنو (GNU General Public License) توزیع میشود. اگر به توزیع تحت شرایط دیگری نیاز دارید، با نویسنده مکاتبه کنید.
کتابخانههای اصلی استفادهشده توسط این برنامه (zlib، regex، libmaa) تحت شرایط متفاوتی توزیع میشوند، بنابراین ممکن است بتوانید از این کتابخانهها برای برنامههایی که با GPL ناسازگار هستند استفاده کنید - لطفاً برای اطلاعات بیشتر اعلانهای حق تکثیر و اطلاعات مجوزی را که همراه کتابخانهها ارائه شدهاند مشاهده کنید و برای رفع این مسائل با وکیل حقوقی خود مشورت نمایید.
همچنین ببینید (SEE ALSO)
| 22 Jun 1997 |