下面的代码片段我不知道为什么这不起作用
但我得到的输出是
-1
-1
代码
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <ctime>
int main()
{
int fd = open("/home/felipe/gdelt/fixed/test.bin", O_APPEND|O_WRONLY|O_CREAT);
std::cout<<close(fd)<<std::endl;
fd = open("/home/felipe/gdelt/fixed/test.bin", O_APPEND|O_WRONLY|O_CREAT);
std::cout<<fd<<std::endl;
//testWrite();
return 0;
}
修订代码(添加模式使其起作用)
int main()
{
int fd = open("/home/felipe/gdelt/fixed/test.bin", O_APPEND|O_WRONLY|O_CREAT,S_IWUSR);
std::cout<<close(fd)<<std::endl;
fd = open("/home/felipe/gdelt/fixed/test.bin", O_APPEND|O_WRONLY|O_CREAT,S_IWUSR);
std::cout<<fd<<std::endl;
//testWrite();
return 0;
}
答案 0 :(得分:2)
man 2 open
引用的一些内容。使用O_CREAT标志时,必须指定第3个mode
参数。
int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);
模式指定在创建新文件时使用的权限。当在flags中指定O_CREAT时,必须提供此参数;如果未指定O_CREAT,则忽略模式。
首先失败的是open
系统调用。 close
仅失败,因为您尝试在无效文件描述符-1上使用它。