2010-07-02 16 views
129

numaralı telefondan, fopen() numaralı aramaya geri döndüğümde. Üzerinde fsync(fd) gibi arama yapmak için bir dosya tanıtıcı almam gerekiyor. Bir dosya tanıtıcısından dosya tanıtıcısı almak için işlev nedir?Dosya tanıtıcısını (FILE * fp) bir dosya tanıtıcısına (int fd) nasıl dönüştürebilirim?

+7

Kendinden cevapları kullanın. – dmckee

+0

Veya dosyayı açık (2) ile açabilir ve –

+6

başından itibaren bir dosya tanıtıcıya sahip olabilirsiniz Ve tersi: [Bir dosya tanıtıcısından bir dosya tanıtıcısı nasıl alınır?] (Http://stackoverflow.com/ sorular/1941464/nasıl yapılır dosya-işaretçisi-bir-dosya-tanımlayıcı) –

cevap

168

Uygun işlev int fileno(FILE *stream)'dur. <stdio.h> numaralı belgede bulunabilir ve standart bir POSIX standardı değil, standart bir C.

+4

Gerçekten de, gerçekten standart bir parçası ise, herhangi bir üstbilgi veya kitaplıktan söz etmeye gerek yoktur. C kütüphanesi. Bununla birlikte, standart değildir, bu yüzden en azından başlıktan bahsetmek mantıklı olabilir. – AnT

+16

Standart C kütüphanesindeki işlevlere erişmek, en azından derleyiciniz prototipleri beklerse, üstbilgileri de dahil etmeyi gerektirir (Bu anlamda standart davranışın ne olduğunu asla hatırlamıyorum). Üstbilgiler olmadan, bir C dosyasının başında hiçbir isim tanımlanmaz. – Novelocrat

+0

@Novelocrat: Ben demek istediğim bir şey yok. Ben sadece bir * standart * fonksiyon için uygun başlık ismini bulmak her zaman kolay olduğu anlamına geliyordu. Yani cevabın tam başlık adını belirtmek gerçekten kritik değildir. – AnT

27

fileno(FILE *) Bir dosya tanıtıcı döndürse bile, stdio'nun arabelleğini atlamamaya ÇOK dikkat edin. Eğer arabellek verileri varsa (okuyup tekrar yazılmamış yazma), dosya tanımlayıcısından yazılan/yazdığınız yazılar beklenmedik sonuçlar verebilir.

, bir DOSYA işaretçi bir dosya tanıtıcı dönüştürmek için, yan sorulardan birini yanıtlamak teşvik edilmektedir, bu "tehlike" şeklinde fdopen(3)

+0

Bunun özellikle arama yapan kullanıcılar için yararlı olduğunu düşünmüyorum ve bu durum, yazılandan bir ay önce OP'nin yorum bölümünde yanıtlanmıştır. Bu, gerçek bilginin aksine bir mantıksal açıklamadır. – kevr

İlgili konular