Questo può sembrare una domanda strana, ma quando vado e aprire un file:Quante informazioni sono effettivamente memorizzate in un descrittore di file?
int fd;
fd = open("/dev/somedevice", O_RDWR);
Che cosa sono io tornare? Vedo la pagina man:
The open() function shall return a file descriptor for the named file that is the lowest file descriptor not currently open for that process
Ma è così? È solo uno int
o ci sono dati allegati dietro le quinte? Il motivo che mi chiedo è che ho trovato un po 'di codice (Linux/C), dove stiamo aprendo il file dallo spazio utente:
//User space code:
int fdC;
if ((fdC = open(DEVICE, O_RDWR)) < 0) {
printf("Error opening device %s (%s)\n", DEVICE, strerror(errno));
goto error_exit;
}
while (!fQuit) {
if ((nRet = read(fdC, &rx_message, 1)) > 0) {
poi alla fine del kernel, le operazioni sui file per questo modulo (che fornisce il fd) mappa legge alla funzione n_read()
:
struct file_operations can_fops = {
owner: THIS_MODULE,
lseek: NULL,
read: n_read,
Poi il descrittore di file è utilizzato nel n_read()
, ma è in corso l'accesso per ottenere i dati:
int n_read(struct file *file, char *buffer, size_t count, loff_t *loff)
{
data_t * dev;
dev = (data_t*)file->private_data;
Allora ... ho Fi gura cosa sta succedendo qui è uno:
A) un descrittore di file restituito da open()
contiene più dati rispetto a solo un valore intero descrittiva
O
B) La mappatura tra una chiamata di "leggere" nel isn spazio utente' t semplice come lo sto rendendo e c'è del codice mancante in questa equazione.
Qualsiasi input che potrebbe aiutarmi a orientarmi?
Dove viene dichiarato 'fQuit'? E sì i descrittori di file sono solo numeri interi. Qualsiasi informazione su di essi deve essere ottenuta con una chiamata di sistema dalla tabella dei descrittori del file del kernel. –
@ user1700513 - si può presupporre che 'fQuite' sia 0. – Mike