Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    129

    [c-programmazione di sistema] copia file

    salve ho scritto questo codice ma non mi funziona
    dovrebbe
    creare il primo file e scriverci abc
    creare il secondo e copiare il testo del primo scrivendolo nel secondo

    invece
    il primo file viene creato e viene scritto anche abc
    invece il secondo file viene creato ma non viene scritto niente all'interno.. non capisco il motivo mi sembra di aver scritto bene il codice.
    qualcuno mi può aiutare grazie
    codice:
    #include<stdlib.h>#include<stdio.h>
    #include<unistd.h>
    #include<fcntl.h>
    #include<sys/file.h>
    
    
    
    
    
    
    
    
    void main(){
    int fd,fd2,n;
    char buff[3]="abc";
    char b[1024];
    
    
    fd=open("newfile.txt",O_CREAT|O_RDWR,777);
    write(fd,buff,3);
    
    
    fd2=open("copiafile.txt",O_CREAT|O_RDWR,777);
    
    
    while((n=read(fd,b,1024))>0){
    write(fd2, b ,n);}
    
    
    
    
    
    
    
    
    close(fd);
    close(fd2);
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Dopo che hai scritto nel primo, non puoi leggere immediatamente ma prima devi riportare all'inizio il puntatore del file.

    Lo fai con la funzione

    lseek

    prima di leggere dallo stesso
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    129
    ho risolto con lseek come hai detto tu, giustamente se non aggiornavo l'offset, dopo abc non c'è scritto niente percio non vedevo visualizzato niente e non ci avevo pensato..
    grazie mille
    Ultima modifica di namelessg; 20-10-2013 a 12:25

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    129
    eh ma non ho capito però

    se nell'esempio di prima effettuavo delle modifiche
    scrivevo nel primo file e poi lo chiudevo
    e poi lo riaprivo ed effettuavo la copia nel secondo
    l'offset del primo file non dovrebbe partire dall'inizio del file visto che l avevo chiuso?? perchè ho provato a fare questa modifica ma nel secondo file non viene copiato niente..

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Se lo chiudi e lo riapri dovrebbe funzionare ... Quale codice hai scritto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    129
    eccolo:
    codice:
    void main(){
    int fd,fd2,n;
    char buff[3]="abc";
    char b[1024];
    
    
    fd=open("newfile.txt",O_CREAT|O_RDWR,777);
    write(fd,buff,3);
    close(fd);
    
    
    fd=open("newfile.txt",O_CREAT|O_RDWR,777);
    fd2=open("copiafile.txt",O_CREAT|O_RDWR,777);
    
    
    while((n=read(fd,b,1024))>0){
    write(fd2, b ,n);}
    
    
    
    
    close(fd);
    close(fd2);
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma avevi detto che chiudevi il file e lo riaprivi ... forse non ci capiamo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    129
    ma l ho chiuso e l ho riaperto :S
    fd=open("newfile.txt",O_CREAT|O_RDWR,777);
    write(fd,buff,3);
    close(fd);


    fd=open("newfile.txt",O_CREAT|O_RDWR,777);

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ah scusa ... avevo confuso con la prima versione del codice ...

    L'unica cosa che mi sembra sbagliata è la

    char buff[3]="abc";

    che dovrebbe essere

    char buff[4]="abc";

    ma non ho provato il codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Fatti stampare i valori di ritorno della prima write() e della close().
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.