- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请假设以下情况(OS = Redhat Linux),
选项A :
编写器线程:使用FD = 1写入文件。在std::atomic
编辑更清晰:使用write C函数调用完成写操作。
https://www.man7.org/linux/man-pages/man2/write.2.html
阅读器线程:使用另存于std::atomic
然后
我假设可能是,在读取线程
之上而不是能够读取写入器线程写入的所有数据(即FD = 2的读取调用可以返回较少的字节数)。由于在FD级别可能存在缓冲。
================================================== ===================================
选项B:
编写器线程:使用FD = 1写入文件。在std::atomic
编辑更清晰:仅完成附加操作(
不会覆盖)。使用write C函数调用完成写入。
https://www.man7.org/linux/man-pages/man2/write.2.html
读者线程:使用
相同的FD = 1读取(使用
pread )在文件上方,并保存在上述std::atomic
https://man7.org/linux/man-pages/man2/pwrite.2.html
现在,是否可以保证Reader线程读取writer线程写入的所有数据?
最佳答案
缓冲处于libc
级别,将数据保留在移交给内核之前。 pread
是一个系统调用,它只会为您提供已经显示给内核的数据。
所以不行。 pread
为您节省了寻求+读取的额外调用,它不能解决任何缓冲问题。
您如何确保内核可以看到您的数据?您尚未显示编写者代码,但通常应调用fflush
来完成。
关于c++ - 使用Linux pread可以避免 “unavailability of data for reading written by a different thread”吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66205010/
所以我有一个函数,它需要一个偏移量和一个宽度来从设备(通常是硬盘)读取。现在我目前使用 fseeko() 和 fread() 从磁盘读取。但是我喜欢用 pread 替换它,因为它更简洁。然而,无论如何
如果我的代码执行类似fd = open("/dev/sdXY", ...) 和pwrite(fd, ...)/pread(fd, ...),I/O 操作是否跳过缓冲区或磁盘缓存?假设 /dev/sdX
我必须将 pwrite() 字符写入文本文件,每个字符代表 1 个字节。另外,我需要将整数写入文本文件,因此 12 也必须是一个字节,而不是 2 个字节(即使是两个字符)。 我正在为字符和整数使用 c
我无法理解为什么 lseek 函数很有用。假设我从用户那里得到了这样的参数: off_t offset = 10; 我想从偏移量中读取 100 个字节。我可以像这样使用 pread: void * b
我正在尝试本地推送到网络驱动器上的共享存储库。我收到以下错误: :~/git push origin master Counting objects ... done Writing objects
我正在尝试使用 pread 和 pwrite,以便我可以查找到文件的开头并在一个原子操作中开始读取或写入。这两个函数都会为我做,但是,我遇到的问题是编译器给我 warning: implicit de
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
所以我使用 qemu kvm 有一段时间了,现在我需要直通 PCI 设备。我做了所有必要的程序来完成这项工作:启用 iommu、modprobed vfio 模块、将设备绑定(bind)到 vfio
我们使用 Ghostscript 从 PDF 中提取第一页,有时 gs 进程卡住并出现错误消息 pread(4, 0x21c56910, 32768, 18446744073709518848) =
所以我有一个测试程序,它将大量数据读入缓冲区并 mallocs相应地缓冲。然而,它 malloc 在大尺寸上失败。 有办法解决这个问题吗? 感谢任何回复 设备/dev/sdc 是一个 2TB 的磁盘。
我正在使用 Linux 内核空间中的 systemtap 探针,因此我无法使用常规的 pread 系统调用。内核空间中是否存在等价的 pread 系统调用? 我的 friend 发现了这个: http
我正在尝试学习 linux api,但有些函数名称(至少对我而言)似乎很麻烦。 谁能给我解释一下 pwrite/pread 中的首字母 p 代表什么? 最佳答案 我只是猜测,但是由于 pread()
什么叫最好的模仿 pread/pwrite在 MSVC 10 中? 最佳答案 在 C 运行时库级别,查看 fread , fwrite和 fseek . 在 Win32 API 级别,查看 ReadF
我的程序(如下)将文本(使用 pwrite())写入文件并从文件中读取(使用 pread())。我的问题是 pread 函数没有从文件中读取我的文本,而 close 函数有什么问题(程序的最后一部分)
嘿,如果我问的是琐碎的问题,请不要介意,但是,请有人帮我解决这个问题.. 最佳答案 分为两部分: pread/pwrite和read/write的区别: 它们都处于同一级别,即系统调用。有两个区别:
我正在使用 GitPython 将一个存储库从 GitHub 克隆到 databricks dbfs 位置,如下所示: outdir = "dbfs:/tmp/project" repo = Repo
我想 fwrite() 是将数据从用户应用程序传递到用户模式下的缓冲区,但是 write() 是将数据从用户模式下的缓冲区传递到内核模式下的缓冲区,而 fsync () 是在内核模式下将数据从缓冲区传
我有一个简单的 django 网站,我试图用 nginx 和 uwsgi 加载。 当我尝试测试我的 nginx 配置时,我得到以下信息: $ sudo nginx -t nginx: [crit] p
在编码时,我的“Docker 容器”崩溃了好几次。查看日志,这是它向我显示的内容: [crit] 1#1: pread() "/etc/nginx/conf.d/default.conf" faile
我是一名优秀的程序员,十分优秀!