|
CS473 - Computer Networks
| Displaying exercises/e2/solution/say.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <errno.h>
#define K 1024
char *pf = "/var/tmp/listen";
ssize_t writeall(int fd, void *buf, size_t r)
{
ssize_t w, t = 0;
do {
w = write(fd, buf+t, r-t);
if (w < 0) return w;
t += w;
} while (t < r);
return t;
}
int main(void)
{
int r;
char buf[K];
if (access(pf, F_OK) != 0) {
printf("No one is listening.\n");
exit(0);
}
printf("Write your message, type Ctrl-D to quit:\n");
int pfd = open(pf, O_WRONLY);
while((r = read(STDIN_FILENO, buf, K)) > 0) {
writeall(pfd, buf, r);
}
return 0;
}
|