【问题标题】:pread and pwrite not defined?pred 和 pwrite 没有定义?
【发布时间】:2021-04-28 21:19:03
【问题描述】:

我正在尝试使用 pread 和 pwrite 以便我可以查找到文件的开头并开始读取或写入一个原子操作。这两个函数都会为我做这件事,但是我遇到的问题是编译器给了我warning: implicit declaration of function ‘pread’,即使我添加了#define _XOPEN_SOURCE 500#include<unistd.h>,就像手册页说的那样。我错过了什么吗?带有函数调用的两个语句如下。 谢谢!

 #include<unistd.h>



 #define _XOPEN_SOURCE 500
    int main (int argc, char *argv[])
    {



while ( (read_in += pread(source_fd, in_buf, in_buf_size,read_in) )  )
    {

if (write_out += pwrite(dest_fd, in_buf, read_in, write_out) == -1)
        {

【问题讨论】:

  • 你能展示整个代码吗?
  • @Mysticial 当然,我添加了所有代码作为编辑。我认为这样做可能代码太多。

标签: c linux atomic glibc unistd.h


【解决方案1】:

您需要定义_XOPEN_SOURCE 500之前您的包含:

#define _XOPEN_SOURCE 500

#include<unistd.h>

否则,unistd.h 标头将看不到宏定义。

【讨论】:

  • 谢谢!或许了解 _XOPEN_SOURCE 500 的用途对我很有用,以便我更好地理解它,你会碰巧知道那是什么吗?
  • @tpar44 如果已定义(具有任何值),则公开 POSIX.1、POSIX.2 和 X/Open (XPG4) 定义。如果定义值为 500 或更大,还公开 SUSv2(UNIX 98 和 XPG5)扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 2018-09-28
  • 2013-05-10
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多