Ho appena letto su mode_t che memorizza fondamentalmente le seguenti informazioni:Perché mode_t usa 4 byte?
- 7 valori booleani per il tipo di file (S_IFREG, S_IFDIR, S_IFCHR, S_ISBLK, S_ISFIFO, S_ISLINK, S_ISSOCK)
- 3 * 3 = 9 valori booleani per i permessi di accesso (leggi, scrivi ed esegui per proprietario, gruppo e altri)
Quindi ha bisogno di 16 bit = 2 byte. Suppongo che potresti persino avere un bit in meno per il tipo di file, dato che deve essere un file normale, una directory, un carattere o un dispositivo a blocchi, un socket, un collegamento simbolico o una pipe. O esistono altri tipi di file?
così ho appena controllato le dimensioni del mode_t con
printf("Size: %d byte\n", sizeof(mode_t));
Esso utilizza 4 byte. Perché usa 4 byte? C'è qualche informazione aggiuntiva che non ho notato?
edit: ho scoperto che mode_t è definita in ptypes.inc:
type mode_t = cuint32;
cuint32 è dimensionata a 32 bit, intero senza segno e definita ctypes.inc:
type cuint32 = LongWord;
Forse questo aiuta per la risposta.
e se è necessario aggiungere più opzioni/contrassegni ecc. In futuro? – Nim
Potrebbe essere che è semplicemente typedef'ed da un 'int', che è 32 bit nella maggior parte delle architetture. O è reso più grande in modo che possa adattarsi alle future bandiere. –
Il tuo ** int ** digita _may_ essere 4 byte anche se memorizzi il numero "255" ... Il "building block" è l'architettura del processore e inoltre hai dello spazio libero per qualsiasi altra bandiera bisogno. OMG odio i bitflags !!! –