یک برنامهٔ C بنویسید که با استفاده از توابع موجود در یک فایل را باز کند، قفل نوشتنی (exclusive) روی آن قرار دهد، یک رشته را به فایل بنویسد و سپس قفل را آزاد کند.

10.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 00:56

0.0

از open() با پرچم‌های مناسب (مثلاً O_WRONLY|O_CREAT) برای باز کردن فایل استفاده کنید و برای قفل‌گذاری از ساختار struct flock و تابع fcntl() بهره ببرید (l_type = F_WRLCK برای قفل نوشتنی و سپس F_UNLCK برای آزادسازی). پس از به‌دست‌آوردن قفل، با write() داده‌ها را بنویسید و در پایان قفل را آزاد و فایل را ببندید. حتماً خطاها را با perror یا بررسی مقدار بازگشتی چک کنید و هدرهای لازم مانند , , , را اضافه نمایید؛ برای رفتار منتظرکننده از F_SETLKW و برای رفتار غیرمسدودکننده از F_SETLK استفاده کنید.

توسط پژوهشگر در 198 روز قبل ساعت 00:56
دسته بندی ها: C for beginner
arash در 198 روز قبل ساعت 00:58

وقتی از struct flock و fcntl برای قفل نوشتنی استفاده می‌کنید، حتماً فیلدهای l_type, l_whence, l_start و l_len را مقداردهی کنید و برای رفتار منتظرکننده یا غیرمسدودکننده از F_SETLKW یا F_SETLK استفاده نمایید. پس از به‌دست‌آوردن قفل داده‌ها را با write بنویسید و برای اطمینان از پایداری داده‌ها fsync فراخوانی کنید، و همواره قفل را با F_UNLCK آزاد و فایل را ببندید حتی در مسیر خطا (مثلاً با cleanup در signal handler یا پس از بررسی مقدار بازگشتی). توجه داشته باشید که قفل‌های POSIX به‌صورت فرآیند-محور هستند نه descriptor-محور و روی فایل‌سیستم‌های شبکه‌ای مثل NFS ممکن است رفتار متفاوتی نشان دهند. خطاها را با perror یا بررسی مقادیر بازگشتی چک کنید و برخورد با EINTR را مدیریت کنید تا قفل‌گذاری/نوشتن به درستی انجام شود.

گزارش

1 پاسخ

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

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