La llamada de archivo en Linux se da cuenta de la operación de archivo (descriptor de archivo)

Las llamadas al sistema en Linux realizan operaciones de archivos (descriptores de archivos)

Contenido: Diseñe un programa para copiar el contenido del archivo a ab para hacer que el contenido de b sea el mismo que el contenido de a. Agregue el contenido de a al archivo c.
Nota: Es necesario considerar que a, byc no existen, y existen problemas como los datos originales en b

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdio.h>
int main(){
      int fd,fd1,fd2;
      int num=0;
      char buf[1024];
      if((fd=open("a",O_CREAT|O_RDONLY,777))>0)
      {
        if ((fd1=open("b",O_RDWR|O_CREAT|O_TRUNC,777))>0)
         {

             while((num=read(fd,buf,sizeof(buf)))>0)
             {
               if(write(fd1,buf,num)!=num)
                {
                   printf("write file b error\n");
                }          
             }
         }
         else
              printf("into file b error");
         
         if((fd2=open("c",O_CREAT|O_WRONLY|O_APPEND,777))>0)
         {
           if((lseek(fd,50,SEEK_END))!=-1)
           {
             while((num=read(fd,buf,sizeof(buf)))>0)
              {
                if(write(fd2,buf,num)!=num)
                {
                  printf("appwrite file c error\n");
                }
              }
           }
           else
               printf("read file a and write into file c error\n");
         }
         else
             printf("into file c error\n");  
      }
      else
           printf("into file c  error\n");
     close(fd);
     close(fd1);
     close(fd2);       
   return 0;
}   

El contenido anterior se implementa mediante la llamada de E / S de archivo en Linxu. La llamada de E / S de archivo en Linux proporciona el servicio subyacente. El servicio subyacente no proporciona almacenamiento en búfer, sino que ingresa directamente al sistema operativo. Por supuesto, el lenguaje C puede En este ejemplo, las funciones de la biblioteca en la biblioteca de E / S estándar se implementan a través de flujos, por lo que no las repetiré aquí.

Precauciones:

El problema clave en este ejemplo es la posición del puntero del archivo a cuando se realiza una escritura adicional en el archivo c. Dado que se realiza la copia inicial del archivo b, el puntero del archivo a apunta al final, por lo que cuando se opera en el archivo c , Cabe señalar que el puntero en el archivo a vuelve a apuntar a la posición inicial del archivo.
Aquí uso la función Lseek.
Conceptos relacionados sobre la función Lessk

Aquí aprendo de esta respuesta: algunos ejemplos relacionados de la función Lessk

contenido

La función lseek de Linux se utiliza para controlar la posición de lectura y escritura de un archivo abierto. Su prototipo de función es el siguiente:
off_t lseek (int fildes, off_t offset, int whence);
uso del parámetro: el parámetro fildes es un descriptor de archivo abierto; el parámetro offset es el número de desplazamiento de la posición de lectura y escritura, que se determina de acuerdo con el parámetro
whyce; el parámetro whoence se divide en los siguientes tres tipos: SEEK_SET: indica que el offset se utiliza para establecer directamente la posición de lectura y escritura.
SEEK_CUR: Indica que la posición actual de lectura y escritura aumenta con los desplazamientos de compensación.
SEEK_END: ​​Indica que la posición de lectura y escritura apunta al final del archivo y luego se agrega un desplazamiento de compensación.
Cuando el valor de whyce es SEEK_CUR o SEEK_END, el parámetro offet permite que aparezcan valores negativos. Cuando la llamada lseek tiene éxito, devuelve la posición actual de lectura y escritura, que es la cantidad de bytes desde el principio del archivo. Si hay un error, devolverá -1 y errno almacenará el código de error. A continuación, se muestran algunos ejemplos de uso:
Mueva la posición de lectura y escritura al principio del archivo: lseek (myfile, 0, SEEK_SET);
Mueva la posición de lectura y escritura al final del archivo: lseek (myfile, 0, SEEK_END);
Quiere obtener el archivo actual posición: off_t cur = lseek (miarchivo, 0, SEEK_CUR);

Nota: Para utilizar la función lseek, debe incluir los siguientes archivos de encabezado:
#include <sys / types.h>
#include <unistd.h>

Si hay alguna deficiencia, indíquelo, ¡gracias! ! !

Supongo que te gusta

Origin blog.csdn.net/HG0724/article/details/101224237
Recomendado
Clasificación