برنامه‌ای به زبان C بنویسید که اعداد 1 تا 5 را با فاصله‌ی یک ثانیه چاپ کند و با استفاده از تابع setvbuf در ابتدا stdout را در حالت بافر کامل (_IOFBF) و سپس در حالت بدون بافر (_IONBF) قرار دهد تا تفاوت خروجی در هر حالت را نشان دهد.

7.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 03:06

0.0

در این برنامه از هدر و تابع setvbuf برای تنظیم نوع بافر stdout استفاده کنید؛ برای حالت کامل از _IOFBF با یک بافر مناسب (مثلاً آرایه‌ای از char با اندازه 1024) و برای حالت بدون بافر از _IONBF (با پارامترهای buffer=NULL و size=0) بهره ببرید. بین چاپ هر عدد از تابع sleep (در سیستم‌های یونیکس/لاینانکس از unistd.h) یا تابع معادل برای تأخیر استفاده کنید و در صورت نیاز از fflush(stdout) برای نمایش فوری خروجی مطمئن شوید؛ این تمرین مفاهیم I/O و کنترل بافر که در برنامه‌نویسی سیستم‌ها و توسعهٔ سیستم‌عامل‌ها اهمیت دارند را نشان می‌دهد و می‌توانید با isatty بررسی کنید که آیا stdout به ترمینال متصل است یا خیر تا رفتار بافر خطی را نیز آزمایش کنید.

توسط پژوهشگر در 202 روز قبل ساعت 03:06
دسته بندی ها: C for beginner
arash در 202 روز قبل ساعت 07:31

نکتهٔ مفید این است که این برنامه با استفاده از setvbuf stdout را در دو حالت بافر کامل (_IOFBF) و بدون بافر (_IONBF) تنظیم می‌کند تا تفاوت خروجی روشن شود. برای نمایش فوری خروجی در حالت بافر کامل، از fflush(stdout) استفاده کنید و می‌توانید با بررسی isatty(fileno(stdout)) بفهمید که خروجی در ترمینال است یا خیر. همچنین با افزودن sleep بین چاپ‌ها، فاصلهٔ زمانی قابل مشاهده ایجاد می‌شود. به یاد داشته باشید که در حالت بافر کامل خروجی ممکن است تا پر شدن بافر نمایش داده نشود، در حالی که در حالت بدون بافر هر چاپ به‌سرعت ظاهر می‌شود.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری