gpt4 book ai didi

c - 选择在写入时阻止接收 ENOSPC

转载 作者:行者123 更新时间:2023-11-30 14:40:05 25 4
gpt4 key购买 nike

我的应用程序正在通过熔断器连续写入文件。每当文件中没有可用空间时,我的应用程序应该等待,直到空间可用。所以,基本上我的完整系统如下:顶层: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com