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 № 1Linux 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.