作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我第一次使用 posix;我包括:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
我有这个片段。
stat(pathname, &sb);
if ((sb.st_mode & S_IFMT) == S_IFREG) {
/* Handle regular file */
}
但是,如果我使用 -std=c99 或 -std=c11 或 -std=gnu99 或 -std=gnu11 进行编译,则在 Gentoo 上使用 GCC 4.8.3 时出现此错误:
error: ‘S_ISFMT’ undeclared (first use in this function)
如果我省略 -std=* 我没有错误。但我也想要 -std=c99 的所有功能(比如关键字 restrict 或 for(int i;;) 等......)我如何编译我的代码?
最佳答案
现代 POSIX 兼容系统需要提供 S_IFMT
和 S_IFREG
值。 POSIX 唯一不需要(事实上,禁止这样做)的版本是 POSIX.1-1990,它似乎是您机器上的标准。
无论如何,每个符合 POSIX 的系统都提供 macros允许您检查文件的类型。这些宏相当于屏蔽方法。
所以在你的情况下,不要写(sb.st_mode & S_IFMT) == S_IFREG
,而是写S_ISREG(sb.st_mode)
。
关于c - S_IFMT 和 S_IFREG 未定义为 -std=c11 或 -std=gnu11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28547271/
void fun1(char *fl){ //flNamep : stores the path of our directory DIR *dip; struct dirent *dit; di
这是我第一次使用 posix;我包括: #include #include #include 我有这个片段。 stat(pathname, &sb); if ((sb.st_mode & S_I
我是一名优秀的程序员,十分优秀!