Właśnie przeczytałem o mode_t że w zasadzie przechowuje następujące informacje:Dlaczego tryb używa 4 bajtów?
- 7 wartości logicznych dla typu pliku (S_IFREG, S_IFDIR, S_IFCHR, S_ISBLK, S_ISFIFO, S_ISLINK, S_ISSOCK)
- 3 * 3 = 9 wartości boolowskich dla uprawnień dostępu (odczyt, zapis i wykonanie dla właściciela, grupy i innych)
Potrzebuje 16 bitów = 2 bajty. Sądzę, że możesz mieć nawet o jeden bit mniej dla tego typu pliku, ponieważ musi to być zwykły plik, katalog, znak lub urządzenie blokowe, gniazdo, dowiązanie symboliczne lub potok. Lub czy istnieją inne typy plików?
Więc ja właśnie sprawdzana wielkość mode_t z
printf("Size: %d byte\n", sizeof(mode_t));
Wykorzystuje 4 bajty. Dlaczego używa 4 bajtów? Czy są jakieś dodatkowe informacje, których nie zauważyłem?
edit: Właśnie okazało się, że mode_t jest zdefiniowana w ptypes.inc:
type mode_t = cuint32;
cuint32 jest 32 bitów, bez znaku liczby całkowitej wielkości i zdefiniowane w ctypes.inc:
type cuint32 = LongWord;
Być może to pomaga w odpowiedzi.
co, jeśli w przyszłości trzeba będzie dodać więcej opcji/flag itp.? – Nim
Może być tak, że jest po prostu wpisany z 'int', który w większości architektur ma 32 bity. Lub jest większy, dzięki czemu może pasować do przyszłych flag. –
Twój ** int ** type _may_ to 4 bajty, nawet jeśli zapisujesz w nim numer "255" ... "Elementem konstrukcyjnym" jest architektura procesora, a ponadto masz trochę wolnego miejsca na jakąkolwiek inną flagę, którą będą potrzeba. OMG Nienawidzę bitflagów !!! –