gpt4 book ai didi

linux - 不间断的读/写调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:13 27 4
gpt4 key购买 nike

在我在 Linux 上进行 C 编程冒险期间的某个时候,我遇到了标志(可能是 ioctl/fcntl?),它使对文件描述符的读写不间断。

不幸的是,我不记得如何做到这一点,或者我在哪里读到它。任何人都可以解释一下吗?

更新0

为了优化我的查询,我在相同的阻塞之后保证 fwrite()fread() 提供,没有用户空间缓冲。

最佳答案

您可以避免 read()write()EINTR,方法是确保所有信号处理程序都安装了 SA_RESTART sigaction() 的标志。

然而,这并不能保护您免受 读/写。这只有通过将 read()/write() 放入循环中才有可能(除了必须已经提供给 read()/write() 调用。)

这样的循环看起来像:

/* If return value is less than `count', then errno == 0 indicates end of file,
* otherwise errno indicates the error that occurred. */
ssize_t hard_read(int fd, void *buf, size_t count)
{
ssize_t rv;
ssize_t total_read = 0;

while (total_read < count)
{
rv = read(fd, (char *)buf + total_read, count - total_read);

if (rv == 0)
errno = 0;

if (rv < 1)
if (errno == EINTR)
continue;
else
break;

total_read += rv;
}

return rv;
}

关于linux - 不间断的读/写调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372950/

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