60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
|
#include <sys/types.h>
|
||
|
#include <sys/stat.h>
|
||
|
#include <unistd.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <fcntl.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
ssize_t write_all(int fd, char *buf, size_t count)
|
||
|
{
|
||
|
ssize_t ret;
|
||
|
size_t cnt;
|
||
|
for(cnt = count; cnt > 0; buf += ret, cnt -= ret) {
|
||
|
ret = write(fd, buf, count);
|
||
|
if(ret == -1) {
|
||
|
// Datei kein Socket und nicht O_NONBLOCK, also
|
||
|
// sollteâ„¢ kein EAGAIN kommen
|
||
|
perror("write");
|
||
|
exit(1);
|
||
|
}
|
||
|
// ret kann 0 sein, das heißt 0 Bytes wurden geschrieben
|
||
|
}
|
||
|
return count;
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
signed int fd_in = open("Dump_Esc.xml", O_RDONLY);
|
||
|
if(fd_in == -1) {
|
||
|
perror("open");
|
||
|
exit(1);
|
||
|
}
|
||
|
signed int fd_out = creat("Dump_Esc_0.xml", 0640);
|
||
|
if(fd_in == -1) {
|
||
|
perror("creat");
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
const size_t SIZ = 1024;
|
||
|
char buf[SIZ];
|
||
|
|
||
|
for(;;) {
|
||
|
ssize_t ret = read(fd_in, buf, SIZ);
|
||
|
if(!ret)
|
||
|
break;
|
||
|
|
||
|
for(size_t i=0; i<SIZ; i++) {
|
||
|
if(buf[i] == '\0')
|
||
|
buf[i] = '0';
|
||
|
}
|
||
|
|
||
|
// zurückgegeben wird hier immer der Count
|
||
|
write_all(fd_out, buf, ret);
|
||
|
}
|
||
|
|
||
|
close(fd_out);
|
||
|
close(fd_in);
|
||
|
puts("Fertig.");
|
||
|
return 0;
|
||
|
}
|