我有两个C文件,server.c和client.c。服务器必须创建一个fifo文件并不断读取它,等待输入。客户端获得其PID,并将PID写入fifo。 这是我第一次推出我的服务器上的文件:写PID先进先出 - Visual C
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,但是在它没有显示之后,并且读取没有返回任何东西,它就会冻结。 我知道有很多网站上的同类岗位的,但我无法找到任何帮助。 我正在使用Ubuntu和GCC编译器与CodeBlocks。
fifos不是常规文件,它可以,如果文件报告大小为0. – yiding
恐怕几乎所有代码在某种程度上都是错误的,并且在另外你的代码格式是混乱和模糊的。在继续进行客户端/服务器多进程应用程序之前,您可能需要阅读一本关于C编程的好书。 – Lundin