Red de conocimiento informático - Aprendizaje de programación - operación de lectura/escritura de archivos de Linux lectura/escritura de archivos de Linux c

operación de lectura/escritura de archivos de Linux lectura/escritura de archivos de Linux c

¿Cómo cargar la biblioteca de enlaces dinámicos C/C en tiempo de ejecución en Linux?

El programa del que estás hablando debería usar carga dinámica

En realidad, un conjunto de interfaces se llama:

dlopendlclosedlsym El nombre de la función se pasa al enlazador dinámico como un parámetro ld.so. ld.so luego busca en la biblioteca dinámica cargada un símbolo que coincida con el nombre de la función. Si la búsqueda tiene éxito, devuelve una dirección que apunta al símbolo. Para funciones, esta dirección es equivalente a un puntero de función. Que todo este proceso pueda desarrollarse sin problemas también depende del ABI del programa actual y de la biblioteca de enlaces dinámicos

¿Cómo utilizar la función de lectura en lenguaje C?

Definición del prototipo de función:

size_tread(intfd, void*buf, size_tcount);

2/8

Archivo de encabezado utilizado:

#includeunistd.hgt;

3/8

Descripción del valor de retorno de la función:

(1) Si tiene éxito, vuelva a leer El número de bytes tomados;

(2) Si hay un error, devuelve -1 y establece errno;

(3) Si el archivo finalizó antes de llamar a la función de lectura, return 0

4/8

Parámetro de función intfd:

Este es el puntero del archivo

5/8

Parámetro de función void*buf:

Los datos leídos se guardarán en el búfer buf y la posición actual de lectura/escritura del archivo se moverá hacia atrás

6/8

Parámetro de función size_tcount:

Este es el número de bytes que se solicita leer. Si el parámetro de recuento es 0, entonces read() no tendrá ningún efecto y devolverá 0. Si se devuelve 0, el valor de retorno es el número de bytes realmente leídos

7/8

Notas sobre el uso de la función:

Si la lectura suave() Devuelve el número de bytes realmente leídos. Es mejor comparar el valor de retorno con el recuento del parámetro. Si el número de bytes devueltos es menor que el número de bytes solicitados para leer, es mejor comparar el valor de retorno con el parámetro. count Si el número de bytes devueltos es menor que el número de bytes leídos, es mejor comparar el valor de retorno con el recuento de parámetros. El número de secciones es menor que el número de bytes solicitados para leer. compare el valor de retorno con el recuento de argumentos.

Si el número de bytes solicitados para leer es menor que el número de bytes solicitados para leer, es posible leer el final del archivo

8/8

Utilice la función leer () para hacer un ejemplo simple: #includesys/stat.hgt; #includesys/stat.hgt; #includesys/stat.hgt; intfd, tamaño; chars="LinuxProgrammer!n", buffer; fd=open("/tmp/temp", O_WRONLY|O_CREAT); ("/tmp/temp", O_RDONLY); tamaño=read(fd, buffer, sizeof(buffer)); close(fd("s", buffer);}

Cómo hacer ¿La función printf en una aplicación de Linux imprime en la terminal y escribe en el registro?

Printf en el programa en segundo plano de Linux ocupa recursos. La función printf en el lenguaje C es una función que genera una salida formateada (definida en stdio.h). Envía caracteres al terminal (monitor, consola, etc.). .) ).

Linux es un conjunto de sistemas operativos similares a Unix que se utilizan y publican libremente. Es un sistema operativo multiusuario, multitarea, multiproceso y compatible con múltiples CPU basado en POSIX y UNIX. . Ejecuta las principales herramientas, aplicaciones y protocolos de red de UNIX. Linux hereda la filosofía de diseño centrada en la red de Unix y es un sistema operativo de red multiusuario estable.

¿Cómo leer datos de un archivo en Linux?

Esto se puede hacer usando el siguiente código:

Nota: El siguiente ejemplo omite el manejo de errores.

#includestdio.hgt;

#includestring.hgt

#includesys/types.hgt; hgt;

#includefcntl.hgt;

typedefstruct

{

charname;

intage;

typedefstruct

p>

}Persona;

intmain(intargc, char**argv)

{

//open

intfd =open("nombre.archivo", O_RDWR|O_CREAT, 0666);

//write

Personzhang3;

memset((void*)zhang3, 0x00, sizeof(Persona));

strcpy(zhang3.name, "zhang3");

zhang3.age= 42;

write(fd, (void*)zhang3, sizeof(Persona));

//lseek

lseek(fd, 0, SEEK_SET) ;

//leer

Personli4;

memset((void*)li4, 0x00, sizeof(Persona));

read(fd, (void*)li4, sizeof(Persona) ));

printf("sn", li4.name);

printf("dn", li4. edad);

//cerrar

cerrar(fd);

return0

}