fz/extra_shares/Fuck_zero.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;
}