我有一个在Ubuntu中的./Desktop/TestFolder0上运行的程序。
当程序在TestFolder0内部运行时,我想创建一个名为Outputs的文件夹,并在该文件夹中保存一个存档的Output.txt。所以它看起来像:
./Desktop/TestFolder0/Outputs
我想以一种方式编写代码,如果我将程序移动到TestFolderN,新文件夹和Output.txt将始终保存在那里。
我看着Creating a new directory in C,它教会了我mkdir
。我仍然不完全知道如何使用它,例如我需要给新目录一个路径,但我不知道如何指向我在文件夹层次结构中的位置。我还需要授予mkdir
权限,允许打开文件夹等。
请帮忙
答案 0 :(得分:0)
对你而言,好消息是如果你没有给出采用文件地址的函数的绝对路径,例如fopen
或mkdir
,它们总是假设路径是相对于当前地址的。因此,如果你写:
mkdir("Outputs");
它将始终生成运行代码的Outputs
目录。如果要创建可执行文件所在的目录(而不是从中运行它的目录),可以看到this question有关如何检索正在运行的可执行文件的位置的信息。简而言之,在Linux中,您可read /proc/self/exe
指向的内容。 (你很可能想要第一个)
关于许可,你可以简单地给它0777(八进制为111111111),这意味着所有可用的权限。 mkdir
(实际上是系统调用)会自动删除您不具备的权限(因此您无法提供您自己没有的目录权限)。
如果您不知道这些位代表什么,您可以阅读in wikipedia。为了完整起见,我将给出一个简短的解释。传统Unix系统中的权限(执行ls -l
时返回的权限)的格式为:
drwxrwxrwx
|\_/\_/\_/
| | | |
T O G R
T
告诉文件的类型,例如目录的d
。 O
是文件所有者的三个权限集,G
具有类似权限,但对于该文件所有者所属的组,R
是对其他人的权限(对不起,最初的O
已被使用;)。每组权限(rwx
)都选择读取,写入和执行权限。您需要对目录执行权限才能导航到该目录。
因此,如果您希望自己有一些目录而不是其他目录,则可以将权限设置为0755.私人目录可以拥有权限0750,超级私人目录可以拥有权限0700.所有用户之间的共享目录可以有权使用0777。