c-不使用mkdir()创建一个新目录



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

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

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

如果目录不存在,"open()"将返回一个错误,我想创建该目录。

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

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

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

我之所以这么问,是因为在我们的代码中,不允许使用mkdir。

我想知道,有其他方法可以创建目录吗?我相信我们也可以使用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运行库封装的内容。

另请参见

  • http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
  • http://asm.sourceforge.net/syscall.html
  • http://en.wikipedia.org/wiki/System_call

内核驱动程序可以使用创建文件夹

struct file *fp = (struct file *) NULL;
fp = filp_open("/home/testdir", O_DIRECTORY|O_CREAT, S_IRUSR);

我可以想象,在某些情况下,创建大量文件夹的"make_dir"驱动程序将比为每个文件夹调用mkdir更快。

相关内容

最新更新