GNU/Linux >> Linux Esercitazione >  >> Linux

Come scrivere un file con C in Linux?

Prima di tutto, il codice che hai scritto non è portabile, anche se riesci a farlo funzionare. Perché utilizzare funzioni specifiche del sistema operativo quando esiste un modo perfettamente indipendente dalla piattaforma per farlo? Ecco una versione che utilizza solo un singolo file di intestazione ed è portabile su qualsiasi piattaforma che implementa la libreria standard 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;
}

EDIT:Il riferimento a glibc ha questo da dire:

In generale, dovresti continuare a usare gli stream piuttosto che i descrittori di file, a meno che non ci sia qualche operazione specifica che vuoi fare che può essere eseguita solo su un descrittore di file. Se sei un programmatore alle prime armi e non sei sicuro di quali funzioni usare, ti suggeriamo di concentrarti su le funzioni di input formattato (vedi Input formattato) e le funzioni di output formattato (vedi Output formattato).

Se sei preoccupato per la portabilità dei tuoi programmi su sistemi diversi da GNU, dovresti anche essere consapevole che i descrittori di file non sono portabili come gli stream. Puoi aspettarti che qualsiasi sistema che esegue ISO C supporti i flussi, ma i sistemi non GNU potrebbero non supportare affatto i descrittori di file o potrebbero implementare solo un sottoinsieme delle funzioni GNU che operano sui descrittori di file. Tuttavia, la maggior parte delle funzioni dei descrittori di file nella libreria GNU sono incluse nello standard POSIX.1.


Devi scrivere() i dati read() nel nuovo file:

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);

Aggiornamento:aggiunte le aperture corrette...

A proposito, O_CREAT può essere OR'd (O_CREAT | O_WRONLY). In realtà stai aprendo troppi handle di file. Basta aprire una volta.


Devi fare write nello stesso ciclo di read .


Linux
  1. Come gestire le capacità dei file Linux

  2. Come trovare un file in Linux

  3. Linux + Come ignorare (filtrare) il file con lo spazio?

  4. Come creare un file con una determinata dimensione in Linux?

  5. Come sostituire un file in jar con la riga di comando in Linux?

Come utilizzare il comando Linux rm con esempi

Come leggere un file con spazi in Linux

Come scrivere dati in file in Linux

Come collegare simbolicamente un file in Linux

Come affrontare i nomi dei file con gli spazi in Linux

Come pianificare i lavori con Cron in Linux