/ / Brak flag O_BINARY i O_TEXT w systemie Linux? - c, plik

Nie ma flag O_BINARY i O_TEXT w systemie Linux? - c, plik

Podczas używania IO systemu na poziomie systemu Linux zauważyłem, że kompilator rozpoznał O_RDONLY i O_RDWR flagi, ale nie miał pojęcia, co to znaczy O_BINARY i O_TEXT flagi.

Czy to jest Linux?

Odpowiedzi:

21 dla odpowiedzi № 1

Linux i prawie każdy smak Unix dlato nie ma znaczenia dla plików binarnych i tekstowych, dlatego nie ma standardowych stałych o tej nazwie. Możesz ręcznie zdefiniować stałe, które mają być zerowe w systemie Linux, jeśli chcesz je uwzględnić w kodzie dla celów przenośności.

http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2007-03/msg00147.html


2 dla odpowiedzi nr 2

Na poziomie języka C i jego standardowej biblioteki nie ma czegoś takiego jak O_BINARY i O_TEXT flagi. Tryb binarny lub tekstowy jest wybierany przez dodanie b specyfikator parametru trybu fopen funkcjonować. Sam specyfikator jest oczywiście obsługiwany przez wszystkie implementacje C, ale na platformach POSIX ten specyfikator nie ma wpływu: zgodnie ze specyfikacją POSIX tryb tekstowy jest taki sam jak tryb binarny.

Nic dziwnego, że jeśli zagłębisz się w poziom niestandardowych funkcji Unix I / O specyficznych dla platformy, odkryjesz, że oni nie mają żadnej wiedzy na temat tego rozróżnienia tekstu / binarnego.


1 dla odpowiedzi nr 3

To jest * nix. * Systemy operacyjne nix nie wykonują automatycznej konwersji wierszy dla operacji wejścia / wyjścia w plikach "tekstowych", więc flagi O_TEXT i O_BINARY nie miałyby sensu.


0 dla odpowiedzi nr 4

Nie ma różnicy na poziomie OS pomiędzyplik binarny i tekstowy w systemie Unix. Plik tekstowy ma tylko ograniczoną zawartość. Dotyczy to również systemu Windows, ale konwencje używane przez C dla końca linii są takie same, jak używane przez Unix, podczas gdy Windows używa pary CR / LF (i wyraźnego końca znacznika pliku w niektórych kontekstach, ale obsługa tego nie była spójna nawet w programach systemowych, kiedy ostatni raz sprawdzałem), więc konieczne jest mapowanie w celu przestrzegania konwencji zalecanych przez C.


0 dla odpowiedzi № 5

Windows używa rn do zakończenia linii, Linux (iinni Uniksi-alike) używają tylko n. W systemie Windows czytanie O_BINARY daje surowe dane, prawdopodobnie nieparzyste zakończenia linii i wszystko, podczas gdy O_TEXT normalizuje zakończenia linii, więc twój kod C widzi tylko jeden znak.

W Linux i in. Nie ma żadnego rozróżnienia między tekstem a binarnym, ponieważ dane mają tylko jeden znak, więc flagi nie są potrzebne.