- 论坛徽章:
- 0
|
while (!stop)
{
FD_SET(STDIN_FILENO, &readset);
FD_SET(devstat.fd, &readset);
if ( (select(devstat.fd+1, &readset, &writeset, NULL, &tv) <=0))
{
//异常中断或者超时
stop = 1;
continue;
}
if (FD_ISSET(devstat.fd, &readset))
{
res = read(devstat.fd, buf, sizeof(buf));
len = len+res;
if(res <=0)
{
break;
}
memcpy(p, buf, res);
p=p+res;
}
}
这是一个读Modem发短信的程序中的一段。
我将这个功能做成一个服务在Linux上运行没有问题。
可是我将这个功能做成了一个so文件供其它模块调用的是时候出现这样一个问题:我在启动我们的整个服务的时候,当前控制台(启动服务的窗口,比如打开的一个secureCRT窗口)不关闭,没有问题,一旦控制台关闭了,就有问题,我跟踪了整个程序,发现是在上面这段程序出现问题了,在窗口被关闭后,这个while循环不停的运行下去,没有停止;而没有关闭的话会在几个while循环后在select处跳出while了。
不知道那位朋友还遇到过此类问题。 |
|