一个进程内打开一个文件, 和一个串口, 则串口能写, 但读不出数据?
一个进程内打开一个文件, 和一个串口, 则串口能写, 但读不出数据? 如果不打开文件或者关闭文件,则可以正常读写串口。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 编辑 ] 你这个程序都正常close设备了吗?
我也很想知道结果。挺有意思的
回复 #1 jifeng314 的帖子
你确定读成功的时候,确实读到了数据?回复 #2 emmoblin 的帖子
程序退出时,才需要关闭设备。回复 #3 dreamice 的帖子
肯定,因为我可以打印出来。 你这样测试一下:先打开串口,读写数据;完了再打开这个文件进行操作,看这个文件能开打不。 经过测试, 虽然Readcomm()函数读不出来, 但是 cat命令 cat dev_name 可以显示出来,真搞不懂了。
回复 #6 dreamice 的帖子
文件什么时间都可以打开 难道你这个pcm_dev不是一个普通的文件?是不是也是一个硬件设备阿? /tmp/pcm_file, 就是一个临时文件
那个tty设备,是一个modern,
页:
[1]
2