2017-04-07 2 views
0

Im Lesen ein Problem mit der read() Funktion in C unter Verwendung vonRead() wird Junk-Daten lesen, bevor tatsächliche Daten

Ich habe eine Datei läßt DateiX sagen, welche den Inhalt hat:

Data to be outputted 

Allerdings, wenn ich die Datei und Verwendung lesen sie es öffnen erhalte ich Müll Daten den Code unten

ssize_t reader = 0; 
ssize_t writer = 0; 
char buffer[256]; 
reader = read(myFile, buffer, 256); 
//check if reader is -1, if so then exit(1) 
writer = write(1, buffer, 256); 
//check if writer is -1, if so then exit(1) 

die Lesefunktion scheint mit zweimal zu laufen. Einmal mit einem Haufen Mülldaten gefolgt von den eigentlichen Daten in der Datei. Irgendeine Idee, wie man das behebt?

+2

sollten Sie nur schreiben, was Sie lesen. Wechseln Sie zu 'writer = write (1, buffer, reader);' – zzn

+1

Ihr Code-Fragment ist kein MCVE ([MCVE]) und konnte Ihr beanspruchtes Verhalten nicht bereitstellen. Bitte stellen Sie eine funktionierende MCVE zur Verfügung, die Ihre Behauptungen wiedergibt. (Was Sie haben, würde alle Arten von Müll nach den Daten in der Datei produzieren - und wenn der Müll enthalten Wagen zurückgibt, könnte es teilweise die echten Daten abdecken.) –

+0

Warum POSIX lesen, schreiben? Warum nicht Standard-C fread und fwrite? –

Antwort

1

Sind Sie sicher, dass Ihr Puffer mit '\ 0' gefüllt ist, abgeschlossen mit '\ 0'? Und Sie rufen schreiben mit 256 - in 3. arg

#include <fcntl.h> 

int main() { 
    const int max_size = 256;  
    char buffer[max_size] = {}; 
    int my_input = open("input", O_TEXT, S_IREAD); 

    ssize_t reader; 
    ssize_t writer; 
    reader = read(my_input, buffer, max_size); 
    if(reader != -1) 
     writer = write(1, buffer, reader); 

    return 0; 
} 
+1

1 ist die Standarddateideskriptornummer für die Standardausgabe, auch bekannt als STDOUT_FILENO. –

+1

Warum 'max_size' in' write (my_output, buffer, max_size); '? Siehe [Kommentar] (http://stackoverflow.com/questions/43268891/read-is-reading-junk-data-before-reading-actual-data#comment73606838_43268891) – chux

+0

@chux oh ich sollte schreiben: schreiben (my_output, buffer , Leser); – bobra

Verwandte Themen