我有两个 C 文件,server.c 和 client.c。服务器必须创建一个 fifo 文件并不断读取它,等待输入。客户端获取它的 PID 并将 PID 写入 fifo。这是我首先启动的服务器文件:
int main(){
int fd;
int fd1;
int bytes_read;
char * buffer = malloc(5);
int nbytes = sizeof(buffer);
if((fd = mkfifo("serverfifo",0666)) == -1) printf("create fifo error");
else printf("create fifo ok");
if ((fd1 = open("serverfifo",O_RDWR)) == -1) printf("open fifo error");
else{
printf("open fifo ok");
while(1){
bytes_read = read(fd,buffer,nbytes);
printf("%d",bytes_read);
}
}
return(0);
}
我的客户文件:
int main(){
int fd;
int pid = 0;
char *fifo;
int bytes;
if ((pid = getpid()) == 0) printf("pid error");
char pid_s[sizeof(pid)];
sprintf(pid_s,"%d",pid);
if ((fd = open ("serverfifo",O_RDWR)) == -1)printf("open fifo error");
else {
printf("open fifo ok");
bytes = write(fd,pid_s, sizeof(pid_s));
printf("bytes = %d",bytes);
}
close(fd);
return(0);
}
我遇到的两个主要问题是:当我将 pid 写入文件时,它返回我写入的字节数,所以看起来没问题,但是当我检查 fifo 文件的属性时,它显示为 0 字节。第二个问题是读取不起作用。如果我在它显示之前执行 printf ,但在它没有显示之后并且读取没有返回任何它只是冻结。我意识到网站上有很多类似的帖子,但我找不到任何有用的东西。我正在使用带有 CodeBlocks 的 Ubuntu 和 GCC 编译器。