Linux内核: is vfs_write thread safe?

标签 linux multithreading file linux-kernel

在我的程序中,由于某些特殊原因,我需要在内核空间中写入文件,尽管我知道不建议这样做。

我正在使用 vfs_write 在内核空间中写入文件,它工作正常。在一种情况下,有两个线程需要写入同一个文件

从互联网上看,用户空间写入似乎是线程安全的,但是,我无法找到vfs_write是否是线程安全的。有人可以帮忙解决这个问题吗?

最佳答案

是的,vfs_write线程安全

您唯一应该关心的是文件的位置,即您作为 pos 参数传递给函数的指针,在调用函数期间不应更改。

例如,您可以使用local变量作为文件的位置,在调用之前将实际位置加载到其中,将指针作为函数的参数传递给它,并在调用后更新实际位置。此技术用于 write syscall implementation :

loff_t pos = file_pos_read(f.file);
ret = vfs_write(f.file, buf, count, &pos);
if (ret >= 0)
   file_pos_write(f.file, pos);

如您所见,vfs_write 不会同步并发写入器之间的文件偏移量。并发写入器可能有用的使用场景包括:

  1. 仅附加:为文件设置O_APPEND标志。在这种情况下,传递给 vfs_write 的文件位置将被忽略,每个写入器都会将数据附加到文件中。
  2. 仅重写:不为文件设置 O_APPEND 标志,并允许每个并发写入者仅修改文件中自己的部分。

关于Linux内核: is vfs_write thread safe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451081/

相关文章:

linux - 监听端口putty隧道不工作

linux - 复制文件及其(最后)文件夹

python - GUI 中具有长进程的选项卡都调用同一个实例? [编辑-QThread 和 QObject 用于将对象传递到 GUI]

file - 使用批处理脚本重命名目录中的多个文件

linux - 从脚本以非 root 身份运行程序

linux - Yocto Project USB 传感器访问

Java/Spring - 输入流中的零文件长度

file - 删除 sublime text 上 WORD 之前的所有行

c - 在简单的客户端/服务器聊天程序中显示文本的困难(显示当前输入)-C

java - 用 ConcurrentHashmap 替换所有出现的 Hashtable 是否安全?