Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
cp mittels fread(3) und fwrite(3) implementieren

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 16. Apr 2006 14:11   Titel: cp mittels fread(3) und fwrite(3) implementieren

Hallo

Ich versuche, ein simples cp in C mittels fread(3) und fwrite(3) zu implementieren. Leider habe ich dabei ein Problem: Der Ausgabedatei fehlen immer zwei Byte an Daten. Kann mir jemand das erklären?

Der Anlass hierzu war, dass man anscheinend mit getc und putc keine Binärdateien bearbeiten kann, weil putc ein unsigned char schreibt.

Hier der Code (die Fehlerbehandlung ist noch nicht so großartig).
Code:
#include <stdio.h>

void copy2(FILE *from, FILE *to){
        int buf[60];
        int size;

        while( ! feof(from) ){
                size = fread( buf, sizeof(int), 60, from);
                fwrite( buf, sizeof(int), size, to);
        }
}

int main(int argc, char **argv){
        FILE *from, *to;

        if(argc != 3){
                fprintf(stderr, "I can only copy one file to another...\n");
                fprintf(stderr, "Usage: %s from_file to_file.", argv[0]);
                return -1;
        }

        if( (from = fopen(argv[1], "r")) == NULL){
                fprintf(stderr, "Could not read %s.\n", argv[1]);
                return -2;
        }

        if( (to = fopen(argv[2], "w")) == NULL){
                fprintf(stderr, "Could not write %s.\n", argv[2]);
                return -3;
        }

        copy2(from, to);

        fclose(from);
        fclose(to);

        return 0;
}
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 16. Apr 2006 16:12   Titel:

Ist die Größe der Quelldatei durch 4 (sizeof(int) auf i386) teilbar?

Und wo ist der Hintergrund von: "keine Binärdateien, da putc ein unsigned char schreibt". Zumindest UNIX macht keine Annahmen über den Inhalt von Dateien, bei anderen Betriebssystemen wird der Modus mit fopen() eingestellt.

Ob du später putc(), write() oder fwrite() nimmst ist unerheblich, du darfst unter UNIX sogar mischen...

Janka
 
Benutzer-Profile anzeigen Private Nachricht senden

C-Lerner
Gast





BeitragVerfasst am: 16. Apr 2006 17:00   Titel: modulo

> weil putc ein unsigned char schreibt.
Wäre doch korrekt? Bei signed char würde ich deine Bedenken verstehen, aber auch das macht nichts, das 7. Bit verschwindet nicht, es wird nur anders interpretiert/dargestellt.

Wie Janka schon schrieb:
Warum int buf[] und sizeof(int), beteht deine Datei aus records dieser festen Größe?
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy