Linux的rmdir函数,第四章*文件与目录(二十)--mkdir和rmdir函数

目录通过mkdir函数来创建,通过rmdir函数删除。

#include

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

成功返回0,失败返回-1。

这个函数创建一个新的,空的目录。点和点点的目录项被自动创建。指定的文件访问权限,mode,被进程的文件模式创建掩码所修改。

一个常见的错误是指定一个和文件一样的mode:只是读和写权限。然而对于目录而言,我们通常想要至少一个执行位被启用,以便访问目录的文件名。

新目录的用户ID和组ID根据我们在4.6节描述的规则建立。

Solaris 9和Linux

2.4.22也让新目录继承父目录的set-group-ID位,以便新目录里创建的文件会继承那个目录的组ID。在Linux上,文件系统实现决定这是

否被支持。例如,ext2和ext3文件系统允许这个行为被mount命令的一个选项控制。然而,在UFS文件系统的Linux实现上,这个行为是不可先

的,它继承设置组ID位来效仿历史的BSD实现,在那目录的组ID从父目录继承而来。

基于BSD的实现不传播设置组ID位,它们简单地继承组ID作为一种策略。因为FreeBSD和Mac OS X 10.3是基于4.4BSD的,它们并不要求继承设置组ID位。在这些平台上,新创建的文件和目录总是从父目录继承组ID,而不管设置组ID位。

UNIX系统的早期版本没有mkdir函数。它在4.2BSD和SVR3中被引入。在早期版本,一个进程必须调用mknod函数来创建一个新的目录。然而

mknod函数仅限于超级用户进程使用。为了绕过这个限制,创建目录的通用命令,mkdir,必须被root拥有,且要设置设置用户ID位。为了从一个进

程里创建一个目录,mkdir命令必须通过system函数调用。

一个空的目录用rmdir函数删除。回想下一个空的目录是只包含点和点点目录项的目录。

#include

int rmdir(const char *pathname);

成功返回0,失败返回-1。

如果调用这个函数后目录的链接数变为0,而且没有其它进程打开这个目录,那么目录开辟的空间会被释放掉。如果当链接数达到0时有一个或多个进程打开了这个

目录,则函数返回前最后的链接会被删除,而且点和点点项也会被删除。另外,这个目录里不能再创建新的文件。然而,目录没有被释放,最后一个进程关闭它。

(即使有些其它进程打开了这个目录,它也不可能在这个目录里做很多事,因为目录必须为空rmdir函数才能成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值