أغلق مؤشر FILE دون إغلاق ملف اصف الأساسي
سؤال
وباستخدام 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) يمكن أن يساعد.