gpt4 book ai didi

不使用 mkdir() 创建新目录

转载 作者:行者123 更新时间:2023-12-02 21:36:55 25 4
gpt4 key购买 nike

在 C 中,我使用“open()”来创建和打开文件:

fd = open(fileName, O_CREAT | O_RDWR, 0644);

如果“fileName”包含目录,则仅当该目录存在并且应用程序有权写入该目录时才会创建文件。

如果目录不存在,“open()”会返回错误,我想创建该目录。

使用 makedir (见下文)我可以创建目录。

int mkdir(const char *path, mode_t mode);

我想知道,还有其他方法来创建目录吗?我相信我们也可以使用ioctl()?还有更多选择吗?

我问这个问题是因为在我们的代码中不允许使用 mkdir。

最佳答案

I was wondering, are there other ways to create a directory? I believe we can also use ioctl()?

至少在 Linux 和 HP-UX 上,mkdir 本身就是一个系统调用。

所以,不,没有其他方法来创建目录,至少在 Linux 上没有 - 其他系统可能以不同的方式实现目录创建。但在任何合理的系统上,我希望目录创建是一项特权操作,因此您需要通过内核。

唯一稍有不同的方法是绕过 C 运行时库直接执行系统调用。在 i386 架构上的汇编 nasm 语法中,这看起来像

mkdir:
mov eax, 39 ; System-call "sys_mkdir"
mov ebx, dirName ; directory name to create
mov ecx, 0x755 ; creation mode
int 80H ; call sys_mkdir

但是,这不是您通常会做的事情,因为它完全依赖于系统。切换到不同的 CPU 将需要不同的寄存器设置和/或不同的指令 - 这就是 C 运行时库封装的内容。

另请参阅

关于不使用 mkdir() 创建新目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21156356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com