Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 16. Nov 2018 4:37

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 16. Apr 2006 14:11 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 05. Mai 2004 7:35
Beiträge: 1238
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&#40;FILE *from, FILE *to&#41;&#123;
        int buf&#91;60&#93;;
        int size;

        while&#40; ! feof&#40;from&#41; &#41;&#123;
                size = fread&#40; buf, sizeof&#40;int&#41;, 60, from&#41;;
                fwrite&#40; buf, sizeof&#40;int&#41;, size, to&#41;;
        &#125;
&#125;

int main&#40;int argc, char **argv&#41;&#123;
        FILE *from, *to;

        if&#40;argc != 3&#41;&#123;
                fprintf&#40;stderr, "I can only copy one file to another...\n"&#41;;
                fprintf&#40;stderr, "Usage&#58; %s from_file to_file.", argv&#91;0&#93;&#41;;
                return -1;
        &#125;

        if&#40; &#40;from = fopen&#40;argv&#91;1&#93;, "r"&#41;&#41; == NULL&#41;&#123;
                fprintf&#40;stderr, "Could not read %s.\n", argv&#91;1&#93;&#41;;
                return -2;
        &#125;

        if&#40; &#40;to = fopen&#40;argv&#91;2&#93;, "w"&#41;&#41; == NULL&#41;&#123;
                fprintf&#40;stderr, "Could not write %s.\n", argv&#91;2&#93;&#41;;
                return -3;
        &#125;

        copy2&#40;from, to&#41;;

        fclose&#40;from&#41;;
        fclose&#40;to&#41;;

        return 0;
&#125;


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 16. Apr 2006 16:12 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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


Nach oben
   
 Betreff des Beitrags: modulo
BeitragVerfasst: 16. Apr 2006 17:00 
> 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?


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de