O_APPEND funktioniert nicht
-
Hallo.
Folgender Code geht:if((fd1 = open(argv[1], O_RDONLY)) == -1) { fprintf(stderr, "Couldn't open file %s\n", argv[1]); exit(1); } if((fd2 = open(argv[2], O_WRONLY)) == -1) { fprintf(stderr, "Couldn't open file %s\n", argv[2]); exit(1); } lseek(fd2, 0L, SEEK_END); while((wert=read(fd1, buffer, 1)) > 0) { if(write(fd2, buffer, wert) != wert) { fprintf(stderr, "Error while writing\n"); exit(1); } } close(fd1); close(fd2);
Wenn ich allerdings das O_WRONLY durch O_APPEND ersetze und fseek rausnehme, bricht das Programm beim Schreiben ab, fd2 ist leer.
Eigentumsrechte sind wohl nicht das Problem.
Was mache ich falsch?
-
600apm schrieb:
Hallo.
Folgender Code geht:if((fd1 = open(argv[1], O_RDONLY)) == -1) { fprintf(stderr, "Couldn't open file %s\n", argv[1]); exit(1); } if((fd2 = open(argv[2], O_WRONLY)) == -1) { fprintf(stderr, "Couldn't open file %s\n", argv[2]); exit(1); } lseek(fd2, 0L, SEEK_END); while((wert=read(fd1, buffer, 1)) > 0) { if(write(fd2, buffer, wert) != wert) { fprintf(stderr, "Error while writing\n"); exit(1); } } close(fd1); close(fd2);
Wenn ich allerdings das O_WRONLY durch O_APPEND ersetze und fseek rausnehme, bricht das Programm beim Schreiben ab, fd2 ist leer.
Eigentumsrechte sind wohl nicht das Problem.
Was mache ich falsch?Es gibt da etwas das nennt sich errno und wird gesetzt, wenn ein Fehler auftritt. Mit strerror erhält man zu jedem Wert von errno eine textuelle Beschreibung des Problems.
Ansonsten aus der Linux-Dokumentation:
The argument flags must include one of the following access
modes: O_RDONLY, O_WRONLY, or O_RDWR. These request opening
the file read-only, write-only, or read/write, respectively.Aus der POSIX-Dokumentation:
Values for oflag are constructed by a bitwise-inclusive OR
of flags from the following list, defined in
<fcntl.h>. Applications shall specify exactly one of the
first three values (file access modes) below in the value of
oflag:O_RDONLY
Open for reading only.O_WRONLY
Open for writing only.O_RDWR Open for reading and writing. The result is undefined
if this flag is applied to a FIFO.
-
Danke.