یک برنامهٔ 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) استفاده کنید تا رقابت بین پروسسها مدیریت شود.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای جلوگیری از رقابت بین فرایندها از قفلهای 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 استفاده کنید تا مشکلات سازگاری را کاهش دهید.
گزارش