【发布时间】:2019-01-29 20:54:30
【问题描述】:
我必须捕捉以下模式:
"rb"、"r+b" 和 "wb"。
我尝试执行以下代码(已编译):
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
FILE *file = fopen("data.bin", "r");
if (!file){
perror("");
return -1;
}
int fd = fileno(file);
if (fcntl(fd, F_GETFL) == O_RDONLY){
printf("read only\n");
}
// printf("%d\n", O_APPEND);
fclose(file);
return 0;
}
但什么也没打印出来。 fcntl() 返回整数,如 32768,但我需要库中的宏,如 O_RDONLY。
【问题讨论】:
-
你得到 32768,即
__O_LARGEFILE|O_RDONLY -
这肯定看起来像XY problem。原始文件模式将解决什么实际问题?并且不知道文件以什么模式打开 - 由您自己的进程 - 有一个非常讨厌的code smell。
-
如果意图是
assert( myfileisreadable( f ) ),这不是讨厌的代码。它不是用于生产代码,而是用于测试代码以帮助检测错误。这就是assert的目的...