请教一个linux read阻塞的问题

请教一个linux read阻塞的问题,第1张

不知题主的read是指socket的read还是文件的read。 默认情况下,socket的read是阻塞的; 对文件进行read,要看内核态的read接口是注册为同步接口还是异步接口(可参见file_operations结构体)

open(dev, O_NONBLOCK|O_RDWR)..... 非阻塞 

------解决方案--------------------

C/C++ code fd = open( Dev, O_RDWR | O_NOCTTY)

options.c_cc[VTIME] = 0/* 等待100ms* 该值等待时间就返回 */

options.c_cc[VMIN] = 1/* 接收到该值数量字节就返回 */

/* 上面两个条件为非零时才有效,两个都为非零时任意一个条件达到都返回,如果两个条件都为零,则马上返回 */

tcflush(fd,TCIFLUSH)/* Update the options and do it NOW */

if (tcsetattr(fd,TCSANOW,&options) != 0){

return ERRCOM_SETATTR

}

return ERRCOM_OK

------解决方案--------------------

两个都为非零时任意一个条件达到都返回

如果两个条件都为零,则马上返回

如果一个为非零,则仅仅关注该非零条件

pthread_join一般是主线程来调用,用来等待子线程退出,因为是等待,所以是阻塞的,一般主线程会依次join所有它创建的子线程。

pthread_exit一般是子线程调用,用来结束当前线程。

子线程可以通过pthread_exit传递一个返回值,而主线程通过pthread_join获得该返回值,从而判断该子线程的退出是正常还是异常。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7336774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存