我正在尝试编写2个程序,这两个程序将使用fifo管道相互交谈。 我使用的例子here(5.2节),但我改变了mknod那里mkfifo并试图改变获取fgets。 这是代码(其中写入到FIFO一个程序):mkfifo使2个进程互相交谈
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h> /*mkfifo, open */
#include <sys/wait.h>
#include <sys/stat.h> /* mkfifo, open */
#include <fcntl.h> /*open */
#define FIFO_PATH "/home/hana/Desktop"
#define BUFFER_SIZE 300
int main()
{
char buffer[BUFFER_SIZE];
int fd;
int wStatus;
mkfifo(FIFO_PATH, 666);
printf("waiting for readers\n");
fd = open(FIFO_PATH, O_RDWR);
while (fgets(buffer, BUFFER_SIZE, fd), !feof(stdin))
{
if ((wStatus = write(fd, buffer, strlen(buffer))) == -1)
perror("write");
else
printf("speak: wrote %d bytes\n", wStatus);
}
return 0;
}
我得到一个编译错误:使与fgets的参数3使指针从整数。 所以fgets期待FILE *而不是文件描述符。 我该怎么办?改变一些东西,以便fgets工作?使用另一个功能?
我正在编译与gcc(ansi,迂腐)。
感谢
由于OP只询问编译错误以及如何获取'FILE *',所以我没有真正阅读代码。 :) – pynexj
@whjm我不是暗示你的回答是错误的。事实上你的投票是我的。 – JeremyP
我还更改了主题并删除了标签'ipc'和'mkinfo'。刚刚回滚。 :) – pynexj