fdopen()
, fileno()
kullanarak, varolan dosya tanıtıcılarıyla akışları açmak mümkündür. Ancak bir dosyayı kapatmanın uygun yolu, bir akışla açtıktan sonraFILE
işaretçisidir. Akışı nasıl kapatabiliriz, ancak açık dosya tanımlayıcısını nasıl tutabiliriz?Bir DOSYA işaretçisini temel dosya tanıtıcısını kapatmadan kapatın
Bu davranış, fflush()
numaralı telefonu ve ardından fileno()
numaralı telefonu aramakla kalmaz, daha sonra hiçbir zaman FILE
işaretçiyi hiçbir zaman kapanışta yeniden kullanmaz. Ek bir endişe, daha sonra fdopen()
tekrar ederseniz, şimdi birden çok FILE
işaretçisi vardır ve bunlardan yalnızca birini kapatabilirsiniz. Eğer (Ben fileno()
beri sen varsayıyorum) bir POSIXy sistemde iseniz
windows ve diğer platformlar desteği fileno()! Bu dup() çözümünü düşünmediğime inanamıyorum, çok zarif ve belirgin –
Ayrıca yeni fd'yi orijinal fd'ye dup2() yapmanız ve sonra da yeni fd'yi kapatmanız gerekmiyor() Dosya akışı kapalı olduğu sürece her şey daha önce olduğu gibi geri döndü? : D Hangi fclose() yapmadan önce oldfd = fileno (stream) demektir. –
Jonathan, çok iş parçacıklı uygulamalarda racy yapmaktır. Fd 'fdopen'e vermeden önce' dup 'yapmak daha iyidir, böylece orijinalinize asla dokunmadığından emin olabilirsiniz. – bdonlan