BUFFCHAN(8) InterNetNews Documentation BUFFCHAN(8)

buffchan - موتور پس‌زمینه بافرشده نوشتن در فایل برای INN

buffchan [-bru] [-c lines] [-C seconds] [-d directory] [-f num-fields] [-l lines] [-L seconds] [-m map] [-p pid-file] [-s format]

buffchan خطوط را از ورودی استاندارد می‌خواند و فیلدهای اولیه در هر خط را در فایل‌هایی که توسط فیلدهای باقی‌مانده در آن خط نام‌گذاری شده‌اند کپی می‌کند. buffchan برای این در نظر گرفته شده است که توسط innd به‌عنوان یک خوراک بسط‌دهنده (exploder feed) فراخوانی شود.

ورودی به‌صورت توالی‌ای از خطوط تفسیر می‌شود. هر خط شامل تعداد ثابتی از فیلدهای اولیه است که پس از آن‌ها تعداد متغیری از فیلدهای نام فایل قرار دارند. تمامی فیلدها در یک خط با نویسه‌های فاصله (whitespace) از هم جدا می‌شوند و نباید شامل هیچ نویسه فاصله‌ای باشند. تعداد پیش‌فرض فیلدهای اولیه یک است.

برای هر خط ورودی، buffchan فیلدهای اولیه را که با یک فاصله از هم جدا شده و در انتها یک خط جدید دارند، در هر یک از فایل‌های نام‌برده‌شده در فیلدهای نام فایل می‌نویسد. فایل‌های خروجی باز نگه داشته می‌شوند و تخلیه بافر (flush) یا بسته شدن آن‌ها تنها بر اساس زمان‌بندی ارائه‌شده توسط گزینه‌های -c، -C، -l و -L انجام می‌شود.

به‌عنوان یک خوراک بسط‌دهنده (برای توضیحات به newsfeeds(5) مراجعه کنید)، buffchan خطوطی را که با علامت تعجب شروع می‌شوند به‌عنوان دستور تفسیر می‌کند. علاوه بر "!begin" (که تنها آغاز خوراک را مشخص می‌کند)، سه دستور پشتیبانی‌شده وجود دارد:

!flush [site]
دستور flush تمام فایل‌های باز را می‌بندد و دوباره باز می‌کند. می‌توان یک سایت اختیاری را مشخص کرد که در این صورت buffchan فقط آن فایل را تخلیه و بازگشایی می‌کند. این دستور مشابه دستور "ctlinnd flush" است. این دستور می‌تواند از طریق innd با استفاده از "ctlinnd send buffchan-site 'flush site'" ارسال شود.

برنامه‌های کاربردی می‌توانند با تغییر نام فایل پیش از صدور دستور، از تکمیل شدن عملیات flush مطلع شوند. هنگامی که نام فایل اصلی مجدداً ظاهر شد، عملیات flush کامل شده است. اگر fchmod(3) در دسترس باشد، buffchan همچنین در حین نوشتن فعال در فایل، آن را به حالت فقط‌خواندنی تغییر می‌دهد و پس از بسته شدن، آن را دوباره به حالت خواندن/نوشتن بازمی‌گرداند. این برنامه فقط در صورتی حالت را به فقط‌خواندنی بازمی‌گرداند که همان فایل را دوباره باز کند.

!drop [site]
دستور drop شبیه دستور flush است، با این تفاوت که هیچ فایلی دوباره باز نمی‌شود. اگر آرگومانی داده شود، تنها سایت مشخص‌شده حذف (drop) می‌شود؛ در غیر این صورت، تمامی سایت‌ها حذف خواهند شد. (توجه داشته باشید که اگر در جریان ورودی مجدداً از آن سایت نام برده شود، سایت دوباره راه‌اندازی خواهد شد.)

هنگامی که دستور "ctlinnd drop site" ارسال می‌شود، اگر آن سایت به‌عنوان یک قیف (funnel) ورودی به بسط‌دهنده buffchan فهرست شده باشد، innd به‌طور خودکار دستور را به buffchan هدایت می‌کند. برای حذف تمام سایت‌ها، از "ctlinnd send buffchan-site drop" استفاده کنید.

!readmap
فایل نگاشت مشخص‌شده با گزینه -m، در صورت ارائه، دوباره بارگذاری خواهد شد.

هنگامی که buffchan فایلی را باز می‌کند، آن را باز نگه می‌دارد (مگر اینکه دستور drop صادر شود). بنابراین ورودی نباید هرگز بیش از حداکثر تعداد فایل‌هایی که یک فرایند مجاز به باز کردن آنهاست، فایل مشخص کند.

خروجی را به استفاده از بافر وادار می‌کند. (این حالت معمولاً پیش‌فرض است، اما ممکن است به سیستم‌عامل بستگی داشته باشد.) در صورت ارائه -b، اندازه بافر معادل BUFSIZ (یک مقدار ثابت در کتابخانه استاندارد I/O سیستم) استفاده می‌شود.
اگر پرچم -c داده شود، buffchan پس از نوشته شدن هر lines خط در یک فایل، آن را می‌بندد و مجدداً باز می‌کند.
اگر پرچم -C داده شود، buffchan در صورتی که فایلی بیش از seconds ثانیه باز مانده باشد، آن را می‌بندد و مجدداً باز می‌کند.
به‌طور پیش‌فرض، buffchan خروجی خود را در دایرکتوری pathoutgoing می‌نویسد. از این پرچم می‌توان برای تعیین دایرکتوری‌ای استفاده کرد که برنامه باید پیش از شروع به آن تغییر مسیر دهد. در صورت استفاده از این پرچم، مقدار پیش‌فرض پرچم -s (در ادامه را ببینید) به یک "%s" ساده تغییر می‌یابد (به عبارت دیگر، فایل‌های خروجی نسبت به directory در نظر گرفته می‌شوند).
به‌طور پیش‌فرض، انتظار می‌رود هر خط شامل یک فیلد ثابت و به دنبال آن تعدادی فیلد نام فایل باشد. اگر این پرچم داده شود، از num-fields به‌عنوان تعداد فیلدهای ثابت اولیه استفاده خواهد شد.
اگر پرچم -l داده شود، buffchan پس از نوشته شدن هر lines خط در یک فایل، بافر خروجی آن را تخلیه (flush) می‌کند.
اگر پرچم -L داده شود، buffchan بافر هر فایل خروجی را هر seconds ثانیه یک بار تخلیه می‌کند.
فایل‌های نگاشت، نام‌های موجود در فیلدهای نام فایل در هر خط را به نام‌های فایلی که باید به‌جای آن‌ها استفاده شوند ترجمه می‌کنند. این قابلیت عمدتاً زمانی استفاده می‌شود که در newsfeeds از نام‌های کوتاه استفاده شده باشد، اما فایل‌های خروجی باید از نام دامنه کامل همتایان دوردست (remote peers) استفاده کنند.

در فایل نگاشت، خطوط خالی و خطوطی که با علامت شارپ ("#") شروع می‌شوند نادیده گرفته می‌شوند. سایر خطوط باید شامل دو نام میزبان باشند که با دونقطه از هم جدا شده‌اند. فیلد اول نامی است که ممکن است در جریان ورودی ظاهر شود؛ فیلد دوم نام فایلی را مشخص می‌کند که هنگام ظاهر شدن نام در فیلد اول، باید استفاده شود.

به‌عنوان مثال، فایل نگاشت زیر می‌تواند برای نگاشت نام‌های کوتاه استفاده‌شده در مثال پایین به نام‌های دامنه کامل به کار رود:

# This is a comment
uunet:news.uu.net
foo:foo.com
munnari:munnari.oz.au
اگر گزینه -p داده شود، buffchan هنگام شروع، خطی حاوی شناسه فرایند (PID) خود را (به‌صورت متنی) در فایل مشخص‌شده می‌نویسد.
به‌طور پیش‌فرض، buffchan پیام‌های خطای خود را به pathlog/errlog ارسال می‌کند. برای لغو این تغییر مسیر و ارسال پیام‌های خطا به خروجی خطای استاندارد (stderr)، از پرچم -r استفاده کنید.
از پرچم -s می‌توان برای تعیین قالبی استفاده کرد که نام فایل را از فیلدهای نام فایل در انتهای هر خط به یک نام فایل واقعی نگاشت می‌کند. این رشته، یک رشته قالب‌بندی sprintf(3) است که باید شامل یک نمونه واحد از "%s" باشد، که با مقدار فیلد نام فایل (احتمالاً پس از نگاشت با فایل نگاشت مشخص‌شده در -m) جایگزین خواهد شد. مقدار پیش‌فرض pathoutgoing/"%s" است.
اگر پرچم -u استفاده شود، خروجی بدون بافر خواهد بود.

اگر buffchan با "-f 2"; فراخوانی شود و ورودی زیر به آن داده شود:

news.software.nntp <1643@munnari.oz.au> foo uunet
news.software.nntp <102060@litchi.foo.com> uunet munnari
comp.sources.unix <999@news.foo.com> foo uunet munnari

آنگاه فایل foo در pathoutgoing شامل این خطوط خواهد بود:

news.software.nntp <1643@munnari.oz.au>
comp.sources.unix <999@news.foo.com>

فایل munnari در pathoutgoing شامل این خطوط خواهد بود:

news.software.nntp <102060@litchi.foo.com>
comp.sources.unix <999@news.foo.com>

و فایل uunet در pathoutgoing شامل این خطوط خواهد بود:

news.software.nntp <1643@munnari.oz.au>
news.software.nntp <102060@litchi.foo.com>
comp.sources.unix <999@news.foo.com>

استفاده از buffchan به این روش را می‌توان در newsfeeds برای مثال به صورت زیر انجام داد:

foo:*,@misc.*:Ap,Tm:buffchan!
munnari:*,@rec.*:Ap,Tm:buffchan!
uunet:*:Ap,Tm:buffchan!
buffchan!:*:Tx,WGm*:<pathbin>/buffchan -f 2

این پیکربندی مثال‌های بالا را ایجاد می‌کند. برای چگونگی پارامتربندی خروجی، به پرچم "W" در newsfeeds(5) مراجعه کنید.

نوشته‌شده توسط Rich $alz <rsalz@uunet.uu.net> برای InterNetNews. تبدیل‌شده به POD توسط Russ Allbery <eagle@eyrie.org>.

ctlinnd(8), inn.conf(5), innd(8), newsfeeds(5).

2023-03-07 INN 2.7.4