gpt4 book ai didi

Linux API : is it possible to specify `O_SYNC` option for a single `write` syscall

转载 作者:行者123 更新时间:2023-12-03 09:58:02 27 4
gpt4 key购买 nike

O_DIRECT 等标志, O_SYNC , O_DSYNC可用于在创建描述符时指定同步/异步 IO(create syscall)。但是是否可以将此标志用于不同的 write (或类似的)系统调用以使其中一些同步?

最佳答案

is it possible to use this flags for distinct write (or similar) syscalls in order to make some of them synchronous?



不, O_SYNC仅出于以下目的才有意义: open()和相关的系统调用。数据传输系统调用,例如 write()不接受旗帜。写入是否同步是打开文件描述的属性,而不是单个数据传输操作的属性。

但是,您可以跟进个人 write()fsync() 通话调用相同的文件描述符以确保将数据分派(dispatch)到物理设备。

或者,您可以使用 fcntl()打开文件后修改文件的标志。你会
  • 读取和存储当前标志
    int flags = fcntl(fd, F_GETFL);
  • 设置包含 O_SYNC 的新标志
    int result = fcntl(fd, F_SETFL, flags | O_SYNC);
  • 执行write
  • 恢复原来的标志
    result = fcntl(fd, F_SETFL, flags);

  • (注意:需要检查函数调用结果是否存在错误情况。为清楚起见,上述摘要中省略了此类检查。)

    除非你绝对需要 write将自己调用为同步的,但是,不理会标志并调用 fsync() 会容易得多。需要的地方。毕竟,这就是它的目的。

    关于Linux API : is it possible to specify `O_SYNC` option for a single `write` syscall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62194605/

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