pread 和 pwrite 未定义?

tpa*_*r44 5 c linux glibc atomic unistd.h

我正在尝试使用 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)
        {
Run Code Online (Sandbox Code Playgroud)

Mys*_*ial 6

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

#define _XOPEN_SOURCE 500

#include<unistd.h>
Run Code Online (Sandbox Code Playgroud)

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

  • @tpar44 *如果已定义(具有任何值),则公开 POSIX.1、POSIX.2 和 X/Open (XPG4) 定义。如果定义 ** 值为 500 或更大**,还公开 SUSv2(UNIX 98 和 XPG5)扩展。* (2认同)