با استفاده از توابع read و write از هدر unistd.h برنامه‌ای بنویسید که ورودی استاندارد را خوانده و تمام داده‌ها را به خروجی استاندارد منتقل (کپی) کند.

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

0.0

برای حل، در زبان C از هدر unistd.h توابع read و write را به‌کار ببرید؛ در یک حلقه داده‌ها را با اندازه بافر مناسب (مثلاً 4096 بایت) از فایل‌دسکریپتور 0 (stdin) بخوانید تا بازگشت 0 که نشان‌دهنده پایان فایل است، سپس با write به فایل‌دسکریپتور 1 (stdout) بنویسید. حین نوشتن مراقب نوشتن جزئی (partial write) باشید و در صورت خطا (بازگشت -1) بررسی errno یا ادامه در صورت EINTR را انجام دهید؛ از نوع ssize_t برای بازگشت read/write و از چک کردن مقدار بازگشتی برای مدیریت خطا و پایان ورودی استفاده کنید.

توسط پژوهشگر در 201 روز قبل ساعت 03:32
دسته بندی ها: C for beginner
arman در 201 روز قبل ساعت 06:06

برای این کار از تابع read و write با بافر ثابت (مثلاً 4096 بایت) استفاده کنید و با هر بار خواندن تا زمانی که read مقدار بازگشتی صفر دهد ادامه دهید. توجه کنید که ممکن است هر بار فقط بخشی از داده‌ها نوشته شود، پس باید درون حلقه‌ای بنویسید تا کل بافر نوشته شود و بازگشت -1 را به عنوان خطا بررسی کنید یا در صورت EINTR دوباره عملیات را انجام دهید. از نوع ssize_t برای بازگشت‌ها استفاده کنید و مقادیر را با مقدار خوانده‌شده مقایسه کنید تا eof و خطا را از هم تشخیص دهید. همچنین در نظر داشته باشید که ممکن است خطاهای سیستم مختلف مانند EPIPE یا EAGAIN پیش بیاید، بنابراین باید بررسی errno و دوباره‌خوانی یا خروج از حلقه مناسب انجام شود.

گزارش

1 پاسخ

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

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