1

我想在我的程序中在 linux 系统上创建一个文件,比如 /a/b/c/test,目前我只有 dir /a 存在并且我想在我的程序中执行它,是否有任何函数可以创建文件为以及在一笔交易中缺少目录(即创建 b/c/test)?如果路径上缺少目录,open、fopen、mkdir 似乎都无法工作。谢谢你。

4

4 回答 4

3

我认为你需要两个命令:

$ mkdir -p /a/b/c/ && touch /a/b/c/test
于 2012-05-31T03:15:56.827 回答
3

来自strace mkdir -p a/b/c

mkdir("a", 0751)                        = 0
open("a", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_NOFOLLOW) = 3
fchdir(3)                               = 0
close(3)                                = 0
mkdir("b", 0751)                        = 0
open("b", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_NOFOLLOW) = 3
fchdir(3)                               = 0
close(3)                                = 0
mkdir("c", 0751)                        = 0

换句话说,您必须mkdir()在每个目录的循环中调用自己,然后创建文件。这就是mkdirexe 的执行方式(在 C 中)。为什么不mkdir -p /a/b/c使用 运行命令execve?当然,为调用正确设置了 C 内容。

于 2012-05-31T03:24:01.943 回答
1

抱歉,您必须对两步过程感到满意:

mkdir -p /a/b/c
touch /a/b/c/test
于 2012-05-31T03:16:06.413 回答
0

如果您使用Glib(Gtk 的最低级别库,可以独立使用),您可以调用g_mkdir_with_parents来创建所有目录(就像mkdir -p命令一样)

于 2012-05-31T05:23:09.317 回答