Mam FILE *
, zwrócony przez połączenie pod numer fopen()
. Muszę pobrać z niego deskryptor pliku, aby wykonywać na nim wywołania takie jak fsync(fd)
. Jaka jest funkcja uzyskania deskryptora pliku ze wskaźnika pliku?Jak przekonwertować wskaźnik pliku (FILE * fp) na deskryptor pliku (int fd)?
Odpowiedz
Właściwa funkcja to int fileno(FILE *stream)
. Można go znaleźć w <stdio.h>
i jest standardem POSIX, ale nie standardowym.
Ściśle mówiąc, nie byłoby potrzeby wspominania o żadnych nagłówkach lub bibliotekach, jeśli funkcja rzeczywiście była częścią standardowego Biblioteka C Jednak nie jest to standard, dlatego warto wspomnieć przynajmniej nagłówek. – AnT
Dostęp do funkcji w standardowej bibliotece C wymaga włączenia nagłówków, przynajmniej jeśli twój kompilator oczekuje prototypów (nigdy nie pamiętam, co jest w rzeczywistości standardowym zachowaniem w tym zakresie). Bez nagłówków żadne nazwy nie są zdefiniowane na początku pliku C. – Novelocrat
@Novelocrat: Nie miałem na myśli, że nie ma potrzeby "# include" niczego. Miałem tylko na myśli, że zawsze łatwo jest znaleźć nazwę odpowiedniego nagłówka dla funkcji * standardowej *. To znaczy. nie jest bardzo ważne, aby podać dokładną nazwę nagłówka w odpowiedzi. – AnT
Nawet jeśli fileno(FILE *)
może zwrócić deskryptor pliku, bądź BARDZO ostrożny, aby nie ominąć bufora stdio. Jeśli istnieją dane buforowe (odczyt odczytywany lub nieopróżniony), odczyt/zapis z deskryptora pliku może dać nieoczekiwane wyniki.
Aby odpowiedzieć na jedno z pytań bocznych, przekształcić deskryptor do wskaźnika pliku, użyj fdopen(3)
Nie sądzę, aby było to pomocne dla osób szukających tego specjalnie, a odpowiedź na to pytanie została już udzielona w sekcji komentarzy w poście PO na miesiąc przed jej napisaniem. Jest to bardziej wyjaśnienie logiczne, w przeciwieństwie do prawdziwych informacji. – kevr
- 1. Jak uzyskać rozmiar pliku na FD?
- 2. Jaki jest pożytek z fd (deskryptor pliku) w węźle js
- 3. deskryptor gniazda vs deskryptor pliku
- 4. C++ FILE wskaźnik na standardowe wyjście?
- 5. Jak przekonwertować int * na int
- 6. wywołanie systemowe do odwzorowania pamięci na deskryptor pliku (odwrotność mmap)?
- 7. Jak uzyskać strumień FILE * z deskryptora pliku?
- 8. Jak uzyskać deskryptor pliku bufora w pamięci?
- 9. Bad deskryptor pliku - Heroku Foreman
- 10. Czy mogę uzyskać tryb dostępu do pliku `FILE *`?
- 11. Jak przekonwertować char na int?
- 12. Odzyskiwanie deskryptor pliku z std :: fstream
- 13. Jak uzyskać deskryptor pliku w pliku node.js, jeśli otworzysz plik przy użyciu openSync
- 14. Czy istnieje sposób na pobranie nazwy pliku z pliku `FILE *`?
- 15. Maven-plugin-plugin: deskryptor cel nie na końcu pliku
- 16. Czy mogę udostępnić deskryptor pliku innemu procesowi na Linuksie lub czy jest on lokalny w procesie?
- 17. Jak przekonwertować tablicę bajtów do pliku ZIP
- 18. Jak przekonwertować int na QString?
- 19. Jak przekonwertować int na nsindexpath?
- 20. Bad deskryptor pliku w Ruby Daemons
- 21. Asynch czekać na deskryptor pliku za pomocą Boost Asio
- 22. Wskaźnik zerowy Wyjątek w pliku-URI?
- 23. Jak przesunąć wskaźnik do wskaźnika na int?
- 24. Java: Jak przekonwertować obiekt File na obiekt String w java?
- 25. Jak przekonwertować wskaźnik pustego kształtu na wskaźnik znakowy w C
- 26. Jak przekonwertować plik FilePath do pliku?
- 27. Gniazdo w języku Python (błąd gniazda Niepoprawny deskryptor pliku)
- 28. Jak przekonwertować z pliku binarnego na relokatowany obiekt z powrotem?
- 29. Jak przekonwertować plik .caf do pliku .mp3?
- 30. Jak przekonwertować IntPtr int
Self-odpowiedź w tym „niebezpieczeństwie” formy są zachęcani. – dmckee
Lub możesz otworzyć plik z open (2), a będziesz mieć deskryptor pliku od początku –
I odwrotnie: [Jak uzyskać wskaźnik PLIKU z deskryptora pliku?] (Http://stackoverflow.com/ pytania/1941464/how-to-get-a-file-pointer-from-a-file-descriptor) –