Esto puede sonar como una pregunta extraña, pero cuando voy y abrir un archivo:¿Cuánta información se almacena realmente en un descriptor de archivo?
int fd;
fd = open("/dev/somedevice", O_RDWR);
¿Qué es exactamente estoy volviendo? Puedo ver que la página del manual dice:
The open() function shall return a file descriptor for the named file that is the lowest file descriptor not currently open for that process
¿Pero es eso? ¿Es solo un int
o hay datos adjuntos detrás de las escenas? La razón por la que estoy pidiendo es que encontré algo de código (Linux/C), donde estamos abriendo el archivo desde el espacio de usuario:
//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) {
continuación, en el extremo del núcleo, las operaciones de archivo para este módulo (que suministra el fd) mapa que dice a la función n_read()
:
struct file_operations can_fops = {
owner: THIS_MODULE,
lseek: NULL,
read: n_read,
a continuación, el descriptor de archivo se utiliza en el n_read()
, pero se está accediendo a obtener datos:
int n_read(struct file *file, char *buffer, size_t count, loff_t *loff)
{
data_t * dev;
dev = (data_t*)file->private_data;
Así que ... FI gura lo que está sucediendo aquí es ya sea:
A) un descriptor de archivo devuelto desde open()
contiene más datos que sólo un valor entero descriptiva
O
B) La asignación entre una llamada a "leer" en el espacio de usuario ISN' Es tan simple como lo estoy haciendo y hay un código que falta en esta ecuación.
¿Alguna entrada que pueda ayudarme a dirigir?
¿Dónde se declara 'fQuit'? Y sí, los descriptores de archivos son solo enteros. Cualquier información sobre ellos debe obtenerse con una llamada al sistema desde la tabla de descriptores de archivos del kernel. –
@ user1700513 - puede suponer que 'fQuite' es 0. – Mike