سؤال

لدي واصف ملف مفتوح للقراءة والتي قد تكون غير محظورة. ما أحتاج إلى القيام به هو ببساطة قراءة جميع البيانات حتى الوصول إلى EOF وكتابة تلك البيانات إلى واصف ملف قابل للكتابة. نظرًا لأن العملية التي تؤدي هذا النسخ ليست "تدرك" أي شيء يحدث حوله ، لا أعتقد أنه يمكنني فعل شيء مفيد أثناء انتظار البيانات ، ولا أريد استخدام ملف while حلقة (بينما errno ليس EAGAIN) لأنني أعتقد أنه سيكون مضيعة. هل هناك طريقة لحظر أو تعليق تنفيذ عملية النسخ حتى تصبح البيانات متاحة؟

هل كانت مفيدة؟

المحلول

إجابتك الأخرى ببساطة unitets O_NONBLOCK, ، مما يعيد الملف إلى الحظر. هذا جيد تمامًا ، إذا كان ذلك يعمل في وضعك ؛ ولكن إذا لم يكن الأمر كذلك ، يمكنك استخدام select() لحظر حتى يمكن قراءة واصف ملف عدم الحظر الخاص بك.

نصائح أخرى

الفصل 7 من Linux SCSI Generic (SG) Howto يعطي مثال من كيفية القيام بذلك:

int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top