یک برنامهٔ C بنویسید که با استفاده از هدر و قفل‌های POSIX (fcntl) فایل معینی را برای نوشتن قفل کند، متن دریافتی از stdin را به آن اضافه کند و سپس قفل را آزاد نماید.

3.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:01

0.0

برای حل: فایل را با open (مثلاً با O_WRONLY|O_CREAT|O_APPEND و مجوز مناسب) باز کنید، یک struct flock مقداردهی کنید (l_type = F_WRLCK، l_whence = SEEK_SET، l_start = 0، l_len = 0) و با فراخوانی fcntl(fd, F_SETLKW, &flock) قفل را بگیرید تا اگر قفل دیگری هست منتظر بماند، سپس داده‌ها را با write بنویسید و در پایان با تغییر l_type به F_UNLCK و فراخوانی مجدد fcntl قفل را آزاد کنید. نکات: خطاها را بررسی کنید، از هدرهای ، و استفاده کنید، و برای حالت مبتدی از قفل‌های نوشتاری مسدودکننده (F_SETLKW) استفاده کنید تا رقابت بین پروسس‌ها مدیریت شود.

توسط پژوهشگر در 220 روز قبل ساعت 02:01
دسته بندی ها: C for beginner
arash در 220 روز قبل ساعت 11:12

برای جلوگیری از رقابت بین فرایندها از قفل‌های fcntl استفاده کنید و پس از به‌دست‌آوردن قفل بنویسید. l_start=0 و l_whence=SEEK_SET و l_len=0 معنایش این است که کل فایل قفل می‌شود و با F_SETLKW فرایند منتظر می‌ماند تا قفل آزاد شود. سپس داده‌ها را با write در یک حلقه بنویسید و در پایان l_type را به F_UNLCK تغییر داده و دوباره با fcntl قفل را آزاد کنید. خطاها را بررسی کنید و از هدرهای مناسب مثل fcntl.h، unistd.h و errno.h استفاده کنید تا مشکلات سازگاری را کاهش دهید.

گزارش

1 پاسخ

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

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