jifeng314 发表于 2009-07-01 15:31

一个进程内打开一个文件, 和一个串口, 则串口能写, 但读不出数据?

一个进程内打开一个文件, 和一个串口, 则串口能写, 但读不出数据? 如果不打开文件或者关闭文件,则可以正常读写串口。
      int fd;
      int tty_fd;

      // 1.打开一个文件
       fd =open("/tmp/pcm_file", O_CREAT|O_WRONLY|O_TRUNC);
      if (pcm_fd< 0)
      {
                printf("open %s error\n", "/tmp/pcm_file");
                return -1;
      }


       //2 打开一个tty设备
       tty_fd= open(dev_name, O_RDWR|O_NOCTTY | O_TRUNC);
      if (0 > tty_fd)
      {
                        printf("open%s error!\n", dev_name);
                        exit(1);
      }
               
      Set_Parity(tty_fd, 8, 1, 'N');
      set_baudrate(tty_fd, 9600);      

      WriteCommtty_fd, "AT\r", 3);
      ReadComm(tty_fd, buff, 320);//如果不执行 1, 则可以成功的读出返回的 “OK”, 一旦执行1, 就读不到任何数据, 困惑了好久? 望各位解答?
      printf(buff);



WriteComm函数实现
int WriteComm(int fd, void* pData, int nLength)
{
      int ret = 0;
      if (-1 == fd)
                return -1;
      
      if (NULL == pData)
                return -1;
      
      ret = write(fd, pData, nLength);
      //printf("write bytes :%d data: %s\n", ret, pData);
      return ret;
}

ReadComm函数实现
int ReadComm(int fd, void* pData, int nLength)
{
      int ret = 0, rc = 0, sum = 0;
      char tmp;
      fd_set readfd;
      struct timeval tv;

      if (-1 == fd)
                return -1;
      if (NULL == pData)
                return -1;
               
      memset(pData, 0, nLength);
      memset(tmp, 0, 100);
      
      tv.tv_sec=1;   
      tv.tv_usec=0;
      
      FD_ZERO(&readfd);
      FD_SET(fd,&readfd);
      while(select(5, &readfd, NULL, NULL, &tv ) > 0)
      {
                memset(tmp, 0, sizeof(tmp));
                tv.tv_sec = 1;
                tv.tv_usec=200*1000;   
                FD_ZERO(&readfd);
                FD_SET(fd, &readfd);
                     
                ret=read(fd, tmp, nLength-sum);
                //printf("select ...%d data %s\n", ret, tmp);
                //strcat(pData, tmp);
                memcpy(pData+sum, tmp, ret);
                sum += ret;
                nLength -= ret;
      }      
      
      
      return sum;
}

谢谢!

[ 本帖最后由 jifeng314 于 2009-7-2 11:49 编辑 ]

emmoblin 发表于 2009-07-01 23:18

你这个程序都正常close设备了吗?
我也很想知道结果。挺有意思的

dreamice 发表于 2009-07-02 10:57

回复 #1 jifeng314 的帖子

你确定读成功的时候,确实读到了数据?

jifeng314 发表于 2009-07-02 11:29

回复 #2 emmoblin 的帖子

程序退出时,才需要关闭设备。

jifeng314 发表于 2009-07-02 11:30

回复 #3 dreamice 的帖子

肯定,因为我可以打印出来。

dreamice 发表于 2009-07-02 11:56

你这样测试一下:
先打开串口,读写数据;完了再打开这个文件进行操作,看这个文件能开打不。

jifeng314 发表于 2009-07-02 12:24

经过测试, 虽然Readcomm()函数读不出来, 但是 cat命令 cat dev_name 可以显示出来,真搞不懂了。

jifeng314 发表于 2009-07-02 16:16

回复 #6 dreamice 的帖子

文件什么时间都可以打开

emmoblin 发表于 2009-07-03 02:54

难道你这个pcm_dev不是一个普通的文件?
是不是也是一个硬件设备阿?

jifeng314 发表于 2009-07-03 09:37

/tmp/pcm_file, 就是一个临时文件

那个tty设备,是一个modern,
页: [1] 2
查看完整版本: 一个进程内打开一个文件, 和一个串口, 则串口能写, 但读不出数据?