【问题标题】:How to use ftruncate in c99 without warning如何在c99中使用ftruncate而不发出警告
【发布时间】:2014-11-07 17:29:03
【问题描述】:

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

In function ‘test’:
warning: implicit declaration of function ‘ftruncate’ [-Wimplicit-function-declaration]

我想在网上找到任何可以解决这个问题的解决方案,但我没有成功。

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

【问题讨论】:

  • 能否请您展示您的实际代码的一部分?您是否包含了所有必需的头文件?
  • 你加入了#include <unistd.h> 吗?

标签: c c99


【解决方案1】:

由于 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

换句话说,要公开ftruncate() 函数,您必须定义这些宏之一,例如:

gcc -c -std=c99 -D_XOPEN_SOURCE=500 myfile.c

【讨论】:

  • 不幸的是,即使设置了常量,我也会不断收到此错误。有没有其他技巧可以做?我在 Cygwin 上运行。
  • 您可以在 main() 函数之前或在头文件中指定函数原型: int ftruncate(int fd, off_t length);
【解决方案2】:

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

#include <unistd.h>

【讨论】:

    猜你喜欢
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多