Есть проблема с этой строкой:
write(fd, rec, sizeof(rec));
Это прототип write()
:
ssize_t write(int fd, const void *buf, size_t count);
Это означает, что вы читаете из области памяти, хранящейся вrec
, а не содержание rec
.
То же самое относится и к read()
.Вам нужно передать указатель на rec
вместо rec
.
Кроме того, всегда обязательно закрывайте файлы после открытия и выполняйте операции ввода-вывода для них.
Вотправильная копия вашего кода:
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/stat.h>
#include <semaphore.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <stdio.h>
int main()
{
const char *myfifo = "/home/tmp/myfifo";
mkfifo(myfifo, 0666);
int fd, rec;
pid_t c = fork();
if(c == 0) {
fd = open(myfifo, O_WRONLY);
rec = 100;
write(fd, &rec, sizeof(rec));
close(fd);
}
if(c > 0) {
sleep(1);
fd = open(myfifo, O_RDONLY);
read(fd, &rec, sizeof(rec));
printf("%d\n", fd);
printf("%d\n", rec);
close(fd);
}
}
Конечно, всегда убедитесь, что у вас есть необходимые разрешения для создания, чтения и записи файлов в этом каталоге.Также убедитесь, что каталог /home/tmp
существует.