如何在没有警告的情况下在c99中使用ftruncate

Hen*_*iek 4 c c99

我想在我的代码中使用ftruncate函数.我必须使用选项std = c99进行编译.我收到警告:

In function ‘test’:
warning: implicit declaration of function ‘ftruncate’ [-Wimplicit-function-declaration]
Run Code Online (Sandbox Code Playgroud)

我在互联网上发现可以解决这个问题的任何解决方案,但我没有成功.

我使用ftrucnate是因为我想在锁定(flock)后清除打开文件的内容.

Fat*_*ror 6

由于ftruncate()不是标准的C函数,并且您已经要求执行标准,因此需要定义相应的功能测试宏(请参阅参考资料feature_test_macros(7)).

ftruncate(2)联机帮助页:

   ftruncate():
       _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
       _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
       || /* Since glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L
Run Code Online (Sandbox Code Playgroud)

换句话说,要公开ftruncate()函数,您必须定义其中一个宏,例如:

gcc -c -std=c99 -D_XOPEN_SOURCE=500 myfile.c
Run Code Online (Sandbox Code Playgroud)


Nik*_*kos 6

FatalError 的回答对我不起作用。大多数情况下,您需要做的就是:

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