我有兩個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