mkdir ()-创建目录

标准

标准/扩展 C 或 C++ 依赖关系
POSIX.1
XPG4
XPG4.2
单一 UNIX 规范版本 3
两个  

格式

#define _POSIX_SOURCE
#include <sys/stat.h>

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

一般描述

创建新的空目录 pathname方式 中的文件许可权位由进程的文件创建掩码修改,然后用于设置要创建的目录的文件许可权位。 有关文件创建掩码的更多信息,请参阅 umask ()-设置和检索文件创建掩码

mode 参数是使用 sys/stat.h 头文件中定义的其中一个标志创建的。 将关闭未定义的任何方式标志,并且将允许该功能继续执行。
FLAG
描述
请求 (s_IRGRP)
文件组的读许可权。
(以 IROTH 为标准)
文件所有者以外的用户的读许可权。
请求
文件所有者的读许可权。
报告 WXG
对文件组的读,写和搜索或执行许可权。 S_IRWXG 是 S_IRGRP , S_IWGRP 和 S_IXGRP 的按位包含 OR。
如果是 IRWXO ,
文件所有者以外的用户的读,写和搜索或执行许可权。 S_IRWXO 是 S_IROTH , S_IWOTH 和 S_IXOTH 的按位包含 OR。
系统 (IRWXU)
文件所有者的读,写和搜索或执行 ;S_IRWXU 是 S_IRUSR , S_IWUSR 和 S_IXUSR 的按位包含 OR。
系统标识
设置要执行的组标识 (GID) 的特权。 当通过 exec 函数运行此文件时,进程的有效组标识将设置为该文件的组标识。 然后,该进程具有与文件所有者相同的权限,而不是实际调用者的权限。
系统标识
设置要执行的用户标识 (UID) 的特权。 通过 exec 函数运行此文件时,进程的有效用户标识将设置为该文件的所有者。 然后,该进程具有与文件所有者相同的权限,而不是实际调用者的权限。
ISVTX
指示共享文本。 保留装入为存储器中的可执行文件。
_ IWGRP
文件组的写许可权。
(_IWOTH)
文件所有者以外的用户的写许可权。
IWUSR
文件所有者的写许可权。
_ IXGRP
对文件组的搜索许可权 (针对目录) 或执行许可权 (针对文件)。
第 IXOTH 个
目录的搜索许可权或文件的执行许可权 (针对文件所有者以外的用户)。
请求 IXUSR
文件所有者的搜索许可权 (针对目录) 或执行许可权 (针对文件)。

新目录的所有者标识设置为进程的有效用户标识。 新目录的组标识设置为拥有目录的组标识。

mkdir () 设置新目录的访问,更改和修改时间。 它还设置包含新目录的目录的更改和修改时间。

如果 pathname 指定符号链接,那么 mkdir () 将失败。

返回值

如果成功, mkdir () 将返回 0。

如果不成功,mkdir() 不会创建目录,返回 -1 ,并将 errno 设为以下值之一:
错误代码
描述
EACCES
进程对 pathname的某些组件没有搜索许可权,或者对要创建的目录的父目录没有写许可权。
EEXIST
指定的文件引用符号链接,或者已存在具有给定 pathname的文件或目录。
ELOOP
符号链接中存在循环。 如果在 pathname的解析中检测到多个 POSIX_SYMLOOP (在 limits.h 头文件中定义) 符号链接,那么会发出此错误。
EMLINK
父目录的链接计数已达到 LINK_MAX (在 limits.h 头文件中定义)。
ENAMETOOLONG
pathname 的长度超过 PATH_MAX 个字符,或者当 _POSIX_NO_TRUNC 生效时, pathname 的某些组件的长度超过 NAME_MAX 个字符。 对于符号链接,替代符号链接的路径名字符串的长度超过 PATH_MAX。 可以使用 pathconf () 来确定 PATH_MAXNAME_MAX 值。
ENOENT
pathname 的某些组件不存在,或者 pathname 是空字符串。
ENOSPC
文件系统没有足够的空间来包含新目录,或者无法扩展父目录。
ENOTDIR
pathname 前缀的组件不是目录。
EROFS
要创建的目录的父目录位于只读文件系统上。

示例

CELEBM16
/* CELEBM16

   The following example creates a new directory.

 */
#define _POSIX_SOURCE
#include <sys/stat.h>
#include <unistd.h>
#undef _POSIX_SOURCE
#include <stdio.h>

main() {
  char new_dir[]="new_dir";

  if (mkdir(new_dir, S_IRWXU|S_IRGRP|S_IXGRP) != 0)
    perror("mkdir() error");
  else if (chdir(new_dir) != 0)
    perror("first chdir() error");
  else if (chdir("..") != 0)
    perror("second chdir() error");
  else if (rmdir(new_dir) != 0)
    perror("rmdir() error");
  else
    puts("success!");
}

相关信息