Chinaunix首页 | 论坛 | 博客
  • 博客访问: 483464
  • 博文数量: 118
  • 博客积分: 5003
  • 博客等级: 大校
  • 技术积分: 1213
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-07 20:29
文章存档

2011年(8)

2010年(4)

2009年(12)

2008年(85)

2007年(9)

我的朋友

分类: LINUX

2008-06-19 09:20:49

进程间通信的方式:有名管道。我这是一个串口的控制程序,用来控制数据的发送和接收,当没有数据进入和没有数据需要向外发送的时候,进程释放cpu,但是我发现,数据的发送是别的进程通过有名管道传递给该进程的,PIPE_GPRS是有名管道,有名管道通过mknod来建立。结果我就发现,在opne该有名管道的时候使用的是O_NONBLOCK非阻塞方式,结果open没有被阻塞,打印出了open ok!,但是在从该管道读数据的时候,系统被阻塞了!!!程序无法实现我想要的目的,为什么,我记得read是不会造成阻塞的阿,如果没有数据就会立即返回的。普通文件的读写时不会出现阻塞的情况,但是管道的读写是会出现阻塞情况的,非阻塞的标志可以在open中设置,而我设置了也没有作用,难道逼我用信号量加普通文件的方式来进行进程间的通信???   
    while(1)
    {
                usleep(60000);
                 if((rc=read(fd,&readbuf[no],1))>0)
                  {
                    no+=rc;
                    if(readbuf[no-1]=='\r')
                    {
                        end=memchr(readbuf,'+',no);
                        if(end!=0)
                        {
                            readbuf[no]='\0';
                            gettimeofday(&tvEnd,   NULL);
                  printf("time=%d second,%d usecond!\n\r",tvEnd.tv_sec,tvEnd.tv_usec);
                            printf("no=%d\r\n",no);
                            printf("receive=%s\n\r",end);
                            no=0;
                        }
                    }                                               
                  }
                 
      if((pipe_fd=open(PIPE_GPRS,O_RDWR|O_NONBLOCK)>0))
                  {
                                  printf("open ok!\n");
                      if((start=read(pipe_fd,writebuf,400))>0)
                                  printf("read %s from FIFO_PIPE!\n",writebuf);
                  }
    }

好久好久没有上来,这一段时间太忙了,压力也很大,反正有很多的事情,其实这个问题当时就解决了,

      if((pipe_fd=open(PIPE_GPRS,O_RDWR|O_NONBLOCK)>0))
                  {
                                  printf("open ok!\n");

open这句话的括号打错位置了,应该要写在

 if((pipe_fd=open(PIPE_GPRS,O_RDWR|O_NONBLOCK))>0)
                  {
                                  printf("open ok!\n");

这样就正确了!!!


阅读(1327) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~