文件没有正确关闭使用fcntl.h关闭

时间:2015-02-04 20:43:58

标签: c linux

下面的代码片段我不知道为什么这不起作用

但我得到的输出是

-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;
}

1 个答案:

答案 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上使用它。