У меня есть пример fifo, в котором дочерний процесс отправляет целое число родительскому процессу. Я хочу, чтобы он вместо этого отправлял строку, но она не работает.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
void errexit(char *errMsg){
printf("\n About to exit: %s", errMsg);
fflush(stdout);
exit(1);
}
int main()
{
char ret;
pid_t pid;
char value;
char fifoName[]="/tmp/testfifo";
char errMsg[1000];
char input_string[30];
scanf("%s", input_string);
FILE *cfp;
FILE *pfp;
ret = mknod(fifoName, S_IFIFO | 0600, 0);
/* 0600 gives read, write permissions to user and none to group and world */
if(ret < 0){
sprintf(errMsg,"Unable to create fifo: %s",fifoName);
errexit(errMsg);
}
pid=fork();
if(pid == 0){
/* child -- open the named pipe and write an integer to it */
cfp = fopen(fifoName,"w");
if(cfp == NULL)
errexit("Unable to open fifo for writing");
ret=fprintf(cfp,"%s",input_string);
fflush(cfp);
exit(0);
}
else{
/* parent - open the named pipe and read an integer from it */
pfp = fopen(fifoName,"r");
if(pfp == NULL)
errexit("Unable to open fifo for reading");
ret=fscanf(pfp,"%s",&value);
if(ret < 0)
errexit("Error reading from named pipe");
fclose(pfp);
printf("This is the parent. Received value %d from child on fifo \n", value);
unlink(fifoName); /* Delete the created fifo */
exit(0);
}
}
Я получаю ошибку в 'ret = fscanf (pfp, "% s", value);', говоря, что% s ожидает тип char, но значение имеет тип int, даже если это не так. он объявлен как char.
Чего мне не хватает? Я просто пытаюсь отправить строку родителю и распечатать ее там.