免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9975 | 回复: 4

请教select()函数,串口??? [复制链接]

论坛徽章:
0
发表于 2007-04-01 16:49 |显示全部楼层
int serial;
int fdmax;
fd_set readfs,writefs;
char buffer[8];
serial=open("/dev/ttyS0",O_RDWR|O_NONBLOCK);
FD_ZERO(&writefds);
FD_ZERO(&readfds);
FD_SET(serial,&readfs);
FD_SET(serial,&writefs);
fdmax=serial+1;
while(1)
{

select(fdmax,&readfs,&writefs,NULL);
if(FD_ISSET(serial,&readfs))
read(serial,buffer,;
if(FD_ISSET(serial,&writefs))
write(serial,buffer,;
}
我想让串口可以随时读写,这样设置行吗??fdmax可以同时存在于readfs,writefs吗???
是不是刚写完串口,又把串口读回去了

论坛徽章:
0
发表于 2007-04-03 08:47 |显示全部楼层
你所谓的随时读写是串口不受io阻塞吗?还是有数据可读到时就读,有空间写时就写数据叫做随时读写阿?要是的话那是可以的,因为你把你打开的文件描述符设置成非阻塞的,所以每当你试图读或者写的时候,要是没有数据可读那么read返回-1,同样,在缓存中没有空间可以让你写的时候,write就返回-1,也就是说不管你能不能读到数据或者写数据都会返回,而不回阻塞。但我想你说的不是上面那种,因为你用了select去控制读数据和写数据。但是你用select来判断描述符是否可读或者可写的话也同样可以完成随时可读写了。因为就像上面说的一样,如果没有数据可以读的话,这个进程就会阻塞在select上,等待数据的到来才能唤醒它,这个时候就可以读了。写也是一样的。


你问的第二个问题“fdmax可以同时存在于readfs,writefs吗?”是什么意思,没有看明白。


要是写完串口的话,一定会读到的。

论坛徽章:
0
发表于 2007-04-03 13:45 |显示全部楼层
谢谢zengg82  
你问的第二个问题“fdmax可以同时存在于readfs,writefs吗?”是什么意思,没有看明白。
我说的是串口描述符同时设置在readfd,writefs,
我想设计一个服务器,可以从管道和串口读数,同时,管道的数据再发到串口,用的是一个串口,所以才提出了上面的问题。
fp=mkfifo(。。);
serial=open("/dev/ttyS0",O_RDWR|O_NONBLOCK);
FD_ZERO(&writefds);
FD_ZERO(&readfds);
FD_SET(serial,&readfs);
FD_SET(serial,&writefs);
FD_SET(fp,&readfs);

while(1)
{
select(fdmax,&readfs,&writefs,NULL);

if(FD_ISSET(serial,&readfs))

read(serial,buffer,;
if(FD_ISSET(fp,&writefs)&&!FD_ISSET(serial,&readfs))
{
if(FD_ISSET(serial,&writefs))
{读管道,发到串口
}
}
}

论坛徽章:
0
发表于 2007-04-04 08:57 |显示全部楼层
哦,我想那样是可以的。。

论坛徽章:
0
发表于 2016-11-24 14:55 |显示全部楼层
你好,我想问一下,你用select 函数 监听串口的读写方式成功了吗,能留个qq吗 交流一下呗,谢谢了 小弟刚毕业,遇到这个问题想问问您
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP