我的管道怎么也不能通讯阿??帮我看看阿。。。。。

发布于 2022-10-15 06:23:47 字数 5298 浏览 18 评论 0

代码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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半﹌身腐败 2022-10-22 06:23:47

打开的管道文件应该是相同的。。。。
#define FIFO_NAME  "./my_fifo2"
#define FIFO_NAME "./my_fifo"

梓梦 2022-10-22 06:23:47

哦,原来如此,总是打错,哎。。。。。。。。多谢你阿。。。。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文