سؤال

وباستخدام fdopen()، fileno() انه من الممكن فتح مجاري مع واصفات الملفات الموجودة. إلا أن الطريقة الصحيحة لإغلاق ملف، وبمجرد فتحه مع تيار هو fclose() مؤشر FILE. كيف يمكن للمرء أن إغلاق الدفق، ولكن الإبقاء على واصف الملف المفتوح؟

وهذا السلوك هو أقرب إلى الدعوة fflush() ثم fileno()، وبعد ذلك أبدا باستخدام مؤشر FILE مرة أخرى، إلا في الختام. مصدر قلق إضافي هو أنه إذا كنت ثم fdopen() مرة أخرى، وهناك الآن عدة مؤشرات FILE، ويمكنك فقط مقربة احد منهم.

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

المحلول

إذا كنت على نظام POSIXy (التي أفترض أنك، لأن لديك fileno())، يمكنك استخدام <لأ href = "http://linux.die.net/man/2/dup" يختلط = "noreferrer"> dup() لاستنساخ واصف الملف:

int newfd = dup(fileno(stream));
fclose(stream);

وأو يمكنك تسليم fdopen() واصف ملف مكرر:

FILE *stream = fdopen(dup(fd), "r");

وفي كلتا الحالتين، فإن نسخة أخرى من فد لا يغلق مع FILE *. ومع ذلك، نضع في الاعتبار مؤشر الموقع <م> هو المشتركة، لذا كن حذرا إذا كنت تستخدم على حد سواء في نفس الوقت. أيضا، أي أقفال fcntl() عقدت على فد الأصلي <م> سوف يفرج عند إغلاق النسخة.

نصائح أخرى

إذا فشل كل شيء آخر، الحزب الاتحادي الديمقراطي (2) يمكن أن يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top