- 论坛徽章:
- 0
|
一个进程内打开一个文件, 和一个串口, 则串口能写, 但读不出数据? 如果不打开文件或者关闭文件,则可以正常读写串口。
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[100];
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 编辑 ] |
|