Задание: Клиент принимает с клавиатуры команды и передает их серверу. Сервер выполняет эти команды, результаты возвращаются клиенту, который запи-сывает их в файл. Написал заготовку и не знаю что делать дальше :?
// client
#define MY_FIFO "my_fifo"
#define SIZE 20
int main(int argc, char* argv[]) {
int fdwr, fdrd, n;
char com[SIZE],res[SIZE*SIZE];
for (int i = 0; i < SIZE; i++) com[i] = ' ';
if ((fdwr = open(MY_FIFO, O_WRONLY)) < 0){
printf("Error opening of FIFO.\n");
_exit(1);
}
scanf("%s", com);
if (write(fdwr, com, SIZE)<0){
printf("Error recording to FIFO.\n");
_exit(1);
}
close(fdwr);
if((fdrd = open(MY_FIFO, O_RDONLY)) < 0){
printf("Error opening of FIFO.\n");
_exit(1);
}
while((n = read(fdrd, res, SIZE*SIZE))>0)
if (write(stdin, res, n) != n){
printf("Error reading from FIFO\n");
_exit(1);
}
printf("\n");
close(fdrd);
_exit(0);
}
// server
#define MY_FIFO "my_fifo"
#define SIZE 20
int main(int argc, char* argv[]) {
int fdwr, fdrd, n, i;
char com[SIZE],res[SIZE*SIZE];
for (i = 0; i < SIZE; i++) com[i] = ' ';
if (mknod(MY_FIFO, S_IFIFO|0666, 0) < 0){
printf("Error creating of FIFO.\n");
_exit(1);
}
if ((fdrd=open(MY_FIFO, O_RDONLY)) < 0){
printf("Error opening of FIFO.\n");
_exit(1);
}
while((n = read(fdrd, com, SIZE)) > 0) {
if (write(1, com, n) != n){
printf("Error output.\n");
_exit(1);
}
else {
res = execlp(com, 0);
}
}
close(fdrd);
if ((fdwr = open(MY_FIFO, O_WRONLY)) < 0) {
printf("Error opening of FIFO.\n");
_exit(1);
}
if (write(fdwr, res, SIZE)<0){
printf("Error recording to FIFO.\n");
_exit(1);
}
close(fdwr);
if (unlink(MY_FIFO) < 0){
printf("Error deleting of FIFO.\n");
_exit(1);
}
_exit(0);
}