在C中,我使用'open()'来创建和打开文件:
fd = open(fileName, O_CREAT | O_RDWR, 0644);
如果'fileName'包含一个目录,只有当该目录存在且该应用程序有权写入该目录时才会创建该文件。
如果目录不存在'open()'返回错误,我想创建目录。
使用makedir(见下文),我可以创建目录。
int mkdir(const char *path, mode_t mode);
我想知道,还有其他方法可以创建目录吗?我相信我们也可以使用ioctl()?有更多选择吗?
我问这个是因为在我们的代码中我们不允许使用mkdir。
答案 0 :(得分:4)
我想知道,还有其他方法可以创建目录吗?我相信我们也可以使用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运行时库封装的内容。
另见
答案 1 :(得分:0)
内核驱动程序可以使用
创建文件夹struct file *fp = (struct file *) NULL;
fp = filp_open("/home/testdir", O_DIRECTORY|O_CREAT, S_IRUSR);
我可以想象一下,创建大量文件夹的“make_dir”驱动程序比为每个文件夹调用mkdir要快一些。