یک برنامهٔ C بنویسید که با استفاده از stdio.h و تابع setbuf بافر stdout را غیرفعال کند، سپس بهصورت خطبهخط ورودی را از stdin بخواند و هر خط را همزمان به stdout و در یک فایل لاگ بنویسد.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:07 0.0
برای حل، را وارد کنید، فایل لاگ را با fopen باز کنید و با setbuf(stdout, NULL) (و در صورت نیاز setbuf(logf, NULL)) بافر را غیرفعال کنید تا خروجی بلافاصله نوشته شود؛ سپس با حلقهای و استفاده از fgets هر خط را از stdin بخوانید و با fprintf یا fputs هم به stdout و هم به فایل لاگ بنویسید، در انتها فایل را ببندید. نکتهها: همیشه نتیجهٔ fopen را بررسی کنید، اندازهٔ بافر مناسب انتخاب کنید و این تکنیک برای دیباگ و توسعهٔ سیستمها که نیاز به خروجیهای آنی دارند مفید است.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
این روش با setbuf(stdout, NULL) خروجی را بلافاصله چاپ میکند، اما برای دیباگ بهتر است با setbuf(logf, NULL) هم لاگ را بیتاخیر پخش کنید. همیشه مقدار بازگشتی fopen را بررسی کنید و برای fgets اندازه بافر مشخصی مثل 1024 یا بزرگتر تعیین کنید تا از بروز خطاهای بافر یا overflow جلوگیری شود. با هر خط ورودی، هم به stdout و هم به فایل لاگ با fprintf یا fputs بنویسید و سپس با fflush هر دو را فوراً همگام کنید. نهایتاً پایان خط و پایان فایل را به درستی تشخیص بدهید و خطاهای ممکن را مدیریت کنید.
گزارش