STRFILE(1) 4th Berkeley Distribution STRFILE(1)

strfile - ایجاد فایلی با دسترسی تصادفی برای ذخیره رشته‌ها
unstr - استخراج رشته‌ها به ترتیب اشاره‌گرها


strfile [-iorsx]
[-c char]
sourcefile
[outputfile]


unstr [-c char]
datafile.[ext]
[outputfile]

دستور strfile فایلی شامل گروه‌هایی از خطوط را می‌خواند که با خطی حاوی یک علامت درصد «%'» (یا نویسه جداکننده مشخص‌شده دیگر) از یکدیگر جدا شده‌اند، و یک فایل داده ایجاد می‌کند که حاوی ساختار سرآیند و جدول آفست‌های فایل برای هر گروه از خطوط است. این ساختار امکان دسترسی تصادفی به رشته‌ها را فراهم می‌آورد.

اگر فایل خروجی در خط فرمان مشخص نشده باشد، با نام sourcefile.dat نام‌گذاری می‌شود.

هدف دستور unstr خنثی‌سازی و معکوس کردن عملکرد strfile است. این دستور رشته‌های موجود در فایل منبع را—که همان datafile.ext بدون پسوند آن است، یا datafile در صورتی که پسوندی مشخص نشده باشد (در این حالت، پسوند .dat به نام فایل داده افزوده می‌شود)—به ترتیبی که در سرآیند فایل datafile فهرست شده‌اند، چاپ می‌کند. اگر هیچ outputfile مشخص نشده باشد، خروجی در خروجی استاندارد چاپ می‌شود؛ در غیر این صورت در فایل تعیین‌شده نوشته خواهد شد. unstr همچنین می‌تواند نویسه جداکننده را به صورت سراسری در فایل رشته‌ها تغییر دهد. با استفاده از strfile -o و سپس استفاده از unstr می‌توان نسخه‌های مرتب‌شده‌ای از فایل‌های ورودی را بر اساس ترتیب جدول استخراج کرد.

گزینه‌ها به شرح زیر هستند:

-c char

تغییر نویسه جداکننده از علامت درصد به char. این گزینه برای هر دو دستور strfile و unstr در دسترس است.

-i

نادیده گرفتن بزرگی و کوچکی حروف هنگام مرتب‌سازی رشته‌ها.

-o

مرتب‌سازی رشته‌ها به ترتیب الفبایی. جدول آفست بر اساس ترتیب الفبایی گروه‌های خطوط ارجاع‌شده مرتب خواهد شد. هرگونه نویسه غیرحرفی-عددی اولیه نادیده گرفته می‌شود. این گزینه باعث تنظیم شدن بیت STR_ORDERED در فیلد str_flags در سرآیند می‌شود. (همچنین اکنون واقعاً مرتب‌سازی را انجام می‌دهد! سابقاً این‌طور نبود).

-r

تصادفی‌سازی دسترسی به رشته‌ها. ورودی‌های جدول آفست به صورت تصادفی مرتب خواهند شد. این گزینه موجب تنظیم بیت STR_RANDOM در فیلد str_flags در سرآیند می‌شود. (و واقعاً تصادفی‌سازی می‌کند)

-s

اجرای بی‌صدا؛ پس از اتمام کار، پیام خلاصه‌ای نمایش داده نمی‌شود.

-x

مشخص می‌کند که هر نویسه الفبایی در گروه‌های خطوط با یک رمز سزار ساده ۱۳ جایگاه چرخیده است (rot13). این گزینه باعث تنظیم شدن بیت STR_ROTATED در فیلد str_flags در سرآیند می‌شود. توجه داشته باشید که این گزینه رشته‌ها را چرخش یا رمزگردانی نمی‌کند--این عملیات باید به طور جداگانه انجام گیرد.

قالب سرآیند به صورت زیر است:

#define VERSION 1 unsigned long str_version; /* version number */ unsigned long str_numstr; /* # of strings in the file */ unsigned long str_longlen; /* length of longest string */ unsigned long str_shortlen; /* shortest string length */ #define STR_RANDOM 0x1 /* randomized pointers */ #define STR_ORDERED 0x2 /* ordered pointers */ #define STR_ROTATED 0x4 /* rot-13'd text */ unsigned long str_flags; /* bit field for flags */ char str_delim; /* delimiting character */

تمام فیلدها با ترتیب بایت شبکه (network byte order) نوشته می‌شوند.

امید می‌رود که اکنون کمتر شده باشند. با این حال، به نظر می‌رسد فال‌ها یا جملات قصار (رشته‌های متنی) که با یک خط خالی آغاز می‌شوند، در میان حروف تصادفی مرتب می‌شوند. ظاهراً این مسئله شامل هنر اسکی (ASCII art) که فاقد هرگونه حرف است و خطوط اولیه‌ای که صرفاً غیرحرفی-عددی هستند نیز می‌شود. دلیلی برای این که چرا چنین اتفاقی می‌افتد پیدا نکردم.

چه کارهایی می‌توان با این ابزار انجام داد به جز نمایش پیام‌های کنایه‌آمیز و ناپسند روی صفحه نمایش کاربران هنگام ورود یا خروج از سیستم؟

امکانات دیگری نیز وجود دارد. کد منبع یک برنامه نمونه به نام randstr، همراه با این بسته توزیع شده است: randstr چیزی میان unstr و fortune است. این برنامه یک فایل مشخص‌شده را می‌خواند و به صورت تصادفی یک رشته متنی را از آن انتخاب می‌کند.

1

گنجاندن strfile.h در یک برنامه خواندن/ارسال اخبار یوزنت، به منظور ایجاد امضاهای تصادفی. Tin(1) کار مشابهی را به شیوه‌ای بسیار پیچیده‌تر انجام می‌دهد.

2

استفاده از آن در یک بازی. اگرچه strfile از «فیلدها» یا «رکوردها» پشتیبانی نمی‌کند، اما هیچ دلیلی وجود ندارد که رشته‌های متنی ساختاری یکنواخت نداشته باشند: خط اول، پرتاب تاس؛ خط دوم، امتیاز؛ خط سوم و خطوط بعدی، پیام متنی.

3

استفاده از آن برای ذخیره دفترچه آدرس. حتی برخی از افرادی که می‌شناسم می‌توانند از آن برای تصمیم‌گیری درباره اینکه جمعه شب‌ها با چه کسی تماس بگیرند استفاده کنند (و برای برخی از آن‌ها اصلاً فرقی نداشت که شماره تلفنی در آن باشد یا نه).

4

استفاده از آن در سناریوهای «قرعه‌کشی». اگر یک ارائه‌دهنده خدمات اینترنت (ISP) هستید، می‌توانید اسکریپتی بنویسید تا نام‌های کاربری و مشخصات GECOS را از /etc/passwd در قالب strfile ذخیره کند، و اسکریپت دیگری بنویسید تا پیام «تبریک، شما برنده شدید» را برای کاربر خوش‌شانس انتخاب‌شده ارسال کند. جایزه می‌تواند یک ماه خدمات رایگان باشد، یا اگر AOL هستید، یک ماه اشتراک رایگان نزد یک ارائه‌دهنده خدمات واقعی!.

byteorder(3), fortune(6)

ابزار strfile نخستین بار در 4.4BSD ظاهر شد. این نسخه به طور چشمگیری دستخوش تغییر شد، به ویژه بخش زیادی از آن به شیوه‌های مختص به لینوکس تغییر یافت. از آن زمان کارهایی برای عمومی‌تر ساختن کد صورت گرفته و تا به این لحظه کارکرد آن روی SunOS 4.x آزمایش شده است. انتظار می‌رود با تداوم فعالیت‌ها، بسترهای بیشتری پشتیبانی شوند.

03/07/2026 June 9, 1993 [Apr. 1997]