2016-05-02 11 views
-1

Nach der Ausführung wird nur "stuff:" auf stdout gedruckt. Hier ist der CodeLeerer Puffer nach der Operation read()

int main(int argc, char *argv[]) { 
int fds [2]; 
char buf [11]; 
fds[1] = open("myfile.txt", O_CREAT | O_RDWR,0700); 
write(fds[1], "some text\n",10); 
//close(fds[1]); 
//fds[1] = open("myfile.txt", O_RDONLY); 
read(fds[1], buf, 10); 
buf[10] = '\0'; 
printf("buff : %s\n", buf); 
close(fds[1]); 

return 0; 
} 

Wenn ich die Kommentare als entfernen "Buff: some text" ist eigentlich auf dem stdout gedruckt. Warum?

+0

Ist das überhaupt eine Sprache? –

+0

add c tag, ich denke, es ist c – piyushj

Antwort

0

Mit den Zeilen auskommentiert, lesen Sie aus einer Datei an einem Punkt nur nach den Text, den Sie geschrieben haben, so gibt es nichts anderes in der Datei.

Wenn Sie diese Zeilen auskommentieren, schließen Sie die Datei und öffnen Sie sie erneut, so dass Sie jetzt beim Lesen vom Anfang der Datei lesen und den Text, den Sie ausgeschrieben haben, lesen.

+0

Danke für den Hinweis. Ich denke, ich muss etwas wie pread + lseek verwenden, um den Punkt, an dem ich gerade lese, neu zu positionieren. Aight? –

+0

Oder überdenken Sie die Notwendigkeit, eine Datei auf diese Weise zu verwenden; Da ich nichts über die tatsächliche Anwendung wusste, konnte ich nicht damit sprechen. –

+0

@FilippoBosco - Es gibt auch die Tatsache, dass Ihr Code keinen einzelnen Rückgabewert für den Erfolg überprüft. Wenn der Code auf unerwartete Ergebnisse überprüft hätte, hätten Sie das Problem sofort bemerkt. –

Verwandte Themen