作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序正在通过熔断器连续写入文件。每当文件中没有可用空间时,我的应用程序应该等待,直到空间可用。所以,基本上我的完整系统如下:顶层:Application_1中间层:libfuse下层:Application_2
现在,Application_1 正在通过 libfuse 不断调用 Application_2 中可用的文件的 write。因此,在某些情况下,Application_2 无法容纳数据,它会将 ENOSPC 返回给 Application_1。在接收 ENOSPC 时,Application_1 必须等待文件 FD 才能接收 POLLOUT。当接收到文件上的 POLLOUT 时,它必须恢复 write()。
为此,我使用 SELECT() API 等待 file_fd 接收 POLLOUT。因此,在 ENOSPC 上我正在执行以下操作:
fd_set fdSetWrite;
FD_ZERO(&fdSetWrite);
FD_SET(fd_write, &fdSetWrite);
if (-1 == select(fd_write + 1, NULL, &fdSetWrite,NULL,0))
{
printf("\n\t\t error select ");
close(fd_write);
exit(0);
}
else
printf("Select is unblocked\n");
if (FD_ISSET(fd_write, &fdSetWrite))
{
printf("Write FD is Set");
}
但是我可以看到 select() 立即被解除阻塞。 Application_2 此处未设置 POLLOUT 事件。我已阻止该消息以进行确认。但它正在被解除封锁。
真的不知道这是怎么发生的。
最佳答案
不支持在设备上有可用空间时自动解锁的机制。您必须定期重试。
关于c - 选择在写入时阻止接收 ENOSPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55715670/
我是一名优秀的程序员,十分优秀!