有一个线程使用fread调用从设备读取数据。只要设备没有发送数据,此调用就会阻塞。当我停止该线程时,它仍然卡在该线程内。
现在我在fread的man页面中找到了以下内容:
错误
在符合单一UNIX规范的所有系统上,fread()函数根据以下条件设置errno:
[EINTR] 由于接收到信号而终止读取操作,并且未传输任何数据。
这意味着可以通过不同的线程来中断调用。但是我不知道如何做。有人能告诉我如何发送信号以中断fread调用吗?我需要发送什么信号?
更新08-10-10 09:25
我仍然无法使其工作。我尝试使用不同的信号进行kill()和pthread_kill()。但似乎没有任何东西可以中断fread()调用。我唯一成功的是杀死整个应用程序,但这不是我想要的。
fread
误读为伦敦俚语中的“thread”(线程)。 - Jon Purdy