Programación de Linux para lograr la operación de cp (notas de estudio 1)

Programación de Linux para lograr la operación de cp (notas de estudio 1)

Prefacio

Esta serie de artículos es un ejemplo de programación para que el autor aprenda Linux. He aprendido descriptores de archivos y API relacionadas antes. Si hay alguna deficiencia, por favor comente y corríjame.


Sugerencia: El siguiente es el contenido de este artículo, los siguientes casos son para referencia

1. Ideas de realización

Permítanme presentarles cpeste comando primero . La cportografía completa en inglés se copytraduce en copiar. El uso es muy simple. Aquí se explican los parámetros de uso común. Aquí solo se explica un directorio de copia -R. Uso:CP {源文件} {目标目录}

  1. Archivo de código abierto src(marcado)
  2. srcLeer el contenido de la archivo bufen
  3. Abrir y crear nuevodes
  4. El bufcontenido está escrito en desel
  5. closeDos archivos

# 二 、 Siga los pasos ## 1. Descripción de referencia de parámetro formal

Al principio no entendí por qué los resultados argc = 3, la función principal de mainun total de dos parámetros int argc, char **argv. Para los programas, todo comienza con el nombre del programa. En la cpimplementación de la instrucción original , los cp、src.c、des.ctres corresponden a parámetros respectivamente , y hay tres parámetros 0、1、2en total. Estos tres parámetros que pertenecen a la función principal mainde int argc. El segundo parámetro char **argves un puntero secundario, todos los elementos de los cuales son una matriz de caracteres. argv[0]Correspondiente a cpuna matriz que contiene los dos elementos de los caracteres, argv[1]el srcelemento de matriz correspondiente contiene tres caracteres, argv[2]pero también el deselemento de matriz correspondiente que contiene tres caracteres.

El código es el siguiente (ejemplo):

#include<stdio.h>
int main(int argc,char **argv){
    
    
	printf("param number is %d\n",argc);
	printf("NO.1 param is %s\n",argv[0]);
	printf("NO.2 param is %s\n",argv[1]);
	printf("NO.3 param is %s\n",argv[2]);
	return 0;
}

Los resultados de la ejecución son los siguientes:
Inserte la descripción de la imagen aquí

Con base en los resultados anteriores, podemos realizar el comando del sistema correspondiente cp.

2. Programación para lograr cp

El archivo compilado demo3.ces un archivo ejecutable generado demo3
que involucrawrite,read,lseek,malloc等API的使用

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
    
    
        int fdSrc;
        int fdDes;
        int n_write;
        int n_read;
        char *readBuf ;
        int n_file;
        if(argc != 3)
        {
    
    
                printf("param error!\n");
                exit(-1);
        }
        fdSrc = open(argv[1],O_RDWR);
        //int open(const char *pathname, int flags, mode_t mode);
        //ssize_t write(int fd, const void *buf, size_t count);
        n_file = lseek(fdSrc,0,SEEK_END);
        lseek(fdSrc,0,SEEK_SET);
        readBuf = (char *)malloc(sizeof(char)*n_file + 8);
        n_read = read(fdSrc,readBuf,n_file);
        //ssize_t read(int fd, void *buf, size_t count);
//      close(fd);
//      fd = open("./file1",O_RDWR);
        fdDes = open(argv[2],O_RDWR|O_CREAT,0600);
        n_write = write(fdDes, readBuf,strlen(readBuf));
        printf("I have read %d bytes \n",n_read);
        close(fdSrc);
        close(fdDes);
        return 0;
}

Llame demo3, demo3.cusaremos nuestra cpcopia para demo5.c:
Inserte la descripción de la imagen aquí
Usar catcomando para ver demo5.c:

Usar comando cat, encontrará que los códigos de los dos archivos son los mismos, lo que indica que hemos implementado exitosamente las instrucciones que vienen con el sistema usando nuestro propio códigocp


3. Registro de actualización de artículos

  • 2021.3.17 escrito por primera vez

mallocAbra espacio y utilícelo para lseekver el tamaño del archivo (tiempo adicional cuando tenga tiempo)

Supongo que te gusta

Origin blog.csdn.net/weixin_45681786/article/details/114951159
Recomendado
Clasificación