GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo escribir un archivo con C en Linux?

En primer lugar, el código que escribió no es portátil, incluso si lo hace funcionar. ¿Por qué utilizar funciones específicas del sistema operativo cuando existe una forma de hacerlo perfectamente independiente de la plataforma? Aquí hay una versión que usa un solo archivo de encabezado y es portátil para cualquier plataforma que implemente la biblioteca estándar de C.

#include <stdio.h>

int main(int argc, char **argv)
{
    FILE* sourceFile;
    FILE* destFile;
    char buf[50];
    int numBytes;

    if(argc!=3)
    {
        printf("Usage: fcopy source destination\n");
        return 1;
    }

    sourceFile = fopen(argv[1], "rb");
    destFile = fopen(argv[2], "wb");

    if(sourceFile==NULL)
    {
        printf("Could not open source file\n");
        return 2;
    }
    if(destFile==NULL)
    {
        printf("Could not open destination file\n");
        return 3;
    }

    while(numBytes=fread(buf, 1, 50, sourceFile))
    {
        fwrite(buf, 1, numBytes, destFile);
    }

    fclose(sourceFile);
    fclose(destFile);

    return 0;
}

EDITAR:La referencia de glibc dice esto:

En general, debe ceñirse al uso de secuencias en lugar de descriptores de archivo, a menos que desee realizar alguna operación específica que solo pueda realizarse en un descriptor de archivo. Si es un programador principiante y no está seguro de qué funciones usar, le sugerimos que se concentre en las funciones de entrada con formato (consulte Entrada con formato) y las funciones de salida con formato (consulte Salida con formato).

Si le preocupa la portabilidad de sus programas a sistemas que no sean GNU, también debe tener en cuenta que los descriptores de archivos no son tan portátiles como los flujos. Puede esperar que cualquier sistema que ejecute ISO C admita secuencias, pero es posible que los sistemas que no sean GNU no admitan descriptores de archivos en absoluto, o que solo implementen un subconjunto de las funciones GNU que operan en los descriptores de archivos. Sin embargo, la mayoría de las funciones de descriptor de archivos en la biblioteca GNU están incluidas en el estándar POSIX.1.


Debe escribir () los datos leídos () en el nuevo archivo:

ssize_t nrd;
int fd;
int fd1;

fd = open(aa[1], O_RDONLY);
fd1 = open(aa[2], O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR);
while (nrd = read(fd,buffer,50)) {
    write(fd1,buffer,nrd);
}

close(fd);
close(fd1);

Actualización:se agregaron las aperturas adecuadas...

Por cierto, el O_CREAT puede ser OR'd (O_CREAT | O_WRONLY). En realidad, está abriendo demasiados identificadores de archivos. Solo haz la apertura una vez.


Tienes que hacer write en el mismo ciclo que read .


Linux
  1. Cómo administrar las capacidades de archivos de Linux

  2. Linux + ¿Cómo ignorar (filtrar) el archivo con espacio?

  3. ¿Cómo cambiar el nombre de un archivo en Linux?

  4. ¿Cómo reemplazar un archivo en jar con línea de comando en Linux?

  5. Cómo eliminar un archivo con este nombre en Linux:-]???????q

Cómo usar el comando rm de Linux con ejemplos

Cómo leer un archivo con espacios en Linux

Cómo escribir datos en un archivo en Linux

Cómo vincular un archivo en Linux

Cómo abordar los nombres de archivo con espacios en Linux

Cómo programar trabajos con Cron en Linux