我的管道怎么也不能通讯阿??帮我看看阿。。。。。
代码1::
/*生产者函数*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h> //PIPE_BUF的宏定义
#include <sys/types.h>
#include <sys/stat.h>
#define FIFO_NAME "./my_fifo2"
#define BUFFER_SIZE PIPE_BUF
#define TEN_MEG (1024*1024*10)
int main()
{
int pipe_fd;
int res;
int open_mode=O_WRONLY;
int bytes_sent=0;
char buffer[BUFFER_SIZE+1];
if(access(FIFO_NAME,F_OK)==-1) //判断文件是否已经存在
{
res=mkfifo(FIFO_NAME,0777);
if(res!=0)
{
perror("mkfifo");
exit (EXIT_FAILURE);
}
}
printf("process %d opening FIFO O_WRONLY.\n",getpid());
pipe_fd=open(FIFO_NAME,open_mode);
printf("process %d result %d.\n",getpid(),pipe_fd);
if(pipe_fd!=-1)
{
while(bytes_sent<TEN_MEG)
{
res=write(pipe_fd,buffer,BUFFER_SIZE);
if(res==-1)
{
fprintf(stderr,"write error on pipe.\n");
exit (EXIT_FAILURE);
}
bytes_sent+=res;
}
close(pipe_fd);
}
else
{
printf("write failure!\n");
exit (EXIT_FAILURE);
}
printf("process %d finished.\n",getpid());
exit (EXIT_SUCCESS);
}
代码2;:
/*消费者程序*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#define FIFO_NAME "./my_fifo"
#define BUFFER_SIZE PIPE_BUF
int main()
{
int pipe_fd;
int res;
int open_mode=O_RDONLY;
char buffer[BUFFER_SIZE+1];
int bytes_read=0;
memset(buffer,'\0',sizeof(buffer));
printf("process %d opening FIFO O_RDONLY.\n",getpid());
pipe_fd=open(FIFO_NAME,open_mode);
printf("process %d result %d.\n",getpid(),pipe_fd);
if(pipe_fd!=-1)
{
do
{
res=read(pipe_fd,buffer,BUFFER_SIZE);
bytes_read+=res;
} while(res>0);
close(pipe_fd);
}
else
{
exit (EXIT_FAILURE);
}
printf("process %d finished,%d bytes read.\n",getpid(),bytes_read);
exit (EXIT_SUCCESS);
}
怎么我的管道都打开以后,2个程序都卡在那里,阻塞了,怎么回事阿??找不出原因阿,谁帮我看看阿??/多谢了阿。。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
打开的管道文件应该是相同的。。。。
#define FIFO_NAME "./my_fifo2"
#define FIFO_NAME "./my_fifo"
哦,原来如此,总是打错,哎。。。。。。。。多谢你阿。。。。。。