C++ 为什么mkdir()后面跟ofstream::operator<&书信电报;拒绝许可而失败?

C++ 为什么mkdir()后面跟ofstream::operator<&书信电报;拒绝许可而失败?,c++,linux,mkdir,ofstream,C++,Linux,Mkdir,Ofstream,以下假定为简单的程序失败,错误号为13:Permission denied。关于文件/目录权限,我没有看到或理解;有人能帮忙找出问题吗 前言 >whoami usera >cd ~ >mkdir abc >ls -ld abc drwxrwxr-x 2 usera usera 4096 May 2 16:36 abc >cd abc 代码(在当前,即“abc”目录中) 错误告诉我:文件/目录权限有问题,但我看不出有什么问题。从ls输出中,我觉得所有文件都是我所有

以下假定为简单的程序失败,错误号为13:Permission denied。关于文件/目录权限,我没有看到或理解;有人能帮忙找出问题吗

前言

>whoami
usera
>cd ~
>mkdir abc
>ls -ld abc
drwxrwxr-x 2 usera usera 4096 May  2 16:36 abc
>cd abc
代码(在当前,即“abc”目录中)

错误告诉我:文件/目录权限有问题,但我看不出有什么问题。从
ls
输出中,我觉得所有文件都是我所有的,所以我不清楚为什么会出现拒绝许可错误。请告诉我这里出了什么问题。

您可以访问目录的内容。将您的许可参数更改为类似0755的值


如果读取而不执行,则可以枚举目录的元素,但不能访问它们。写而不执行在目录上是没有意义的。

您能检查
mkdir
上的返回吗?如果成功,则应为0(如果不成功,则应在尝试打开文件之前使用
strerror
。@scohe001-根据您的建议更新代码:
mkdir()
显示成功。您需要以“超级用户”权限运行程序。@raindrop7“权限被拒绝”并不总是意味着您缺少一个
sudo
mkdir()
没有失败。
//main.cpp
#include <iostream>
#include <string>
#include <fstream>
#include <cerrno>
#include <cstdio>
#include <cstring>
#include <sys/stat.h>
#include <sys/types.h>

int main( int argc, char* argv[] )
{
  const std::string path = "./foo/";
  int result = 0;
  errno = 0;

  result = mkdir( path.c_str(), 0666 );
  std::cout << result << ": " << errno << ": " << strerror( errno ) << std::endl;
  std::string tmp = path + "fooFile";
  std::ofstream ofs( tmp.c_str(), std::ofstream::out );
  ofs << "hello, world!";
  std::cout << std::boolalpha << ofs.good() << std::endl;
  ofs.close();
  std::cout << result << ": " << errno << ": " << strerror( errno ) << std::endl;
  return 0;
}
>ls -l
total 4
-rw-rw-r-- 1 usera usera 585 May  2 16:39 main.cpp

>g++ --version
g++ (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

>g++ -g main.cpp && ./a.out
0: 0: Success
false
0: 13: Permission denied
>
>ls -l
total 52
-rwxrwxr-x 1 usera usera 41844 May  2 16:44 a.out
drw-rw-r-- 2 usera usera  4096 May  2 16:44 foo
-rw-rw-r-- 1 usera usera   585 May  2 16:39 main.cpp