Linux的目录编程系统调用

1 目录的维护

#include <sys/stat.h>
int chmod(const char* path,mode_t mode);

chmod用来改变文件或目录的访问权限,参数mode与open的相同。除非程序被赋予适当的特权,否则只有文件的属主或超级用户可以修改它的权限。

#include <sys/types.h>
#include <unistd.h>
int chown(const char* path,uid_t owner,gid_t group);

chown用用户ID和组ID修改文件属主的系统值。

#include <unistd.h>
int unlink(const char* path);
int link(const char* path1,const char* path2);
int symlink(const char* path1,const char* path2);

unlink用来删除一个文件的目录项并减少它的链接数,成功时返回0失败时返回-1,若想删除文件就必须拥有该文件所属目录的写和执行权限。若一个文件的链接数减少到零,且没有进程打开它,那么该文件就会被删除。rm程序就是使用这个系统调用。
link创建一个指向已有文件path1的新链接,新目录项由path2给出。
symlink创建符号链接,一个文件的符号链接不会增加该文件的链接数,类似于Windows中的快捷方式,它不会像普通链接那样防止文件被删除。由下图可以看到link是硬链接,类似于复制文件,而symlink是软链接,类似于创建快捷方式。
在这里插入图片描述
在这里插入图片描述

 #include <sys/types.h>
 #include <sys/stat.h>
 int mkdir(const char* path,mode_t mode);

mkdir系统调用用于创建目录,权限由mode决定,含义根据O_CREAT选项中的有关定义进行设置

#include <unistd.h>
int rmdir(const char* path);

rmdir系统调用用于删除目录,但只有在目录为空时才可以。

#include <unistd.h>
int chdir(const char* path);
char* getcwd(char* buf,size_t size);

chdir函数使程序可以在文件系统中切换目录。
getcwd函数获取当前目录并写入buf中,目录名长度不能超过size,若失败返回NULL,成功时返回指针buf。

2 扫描目录

Linux与目录扫描操作相关的函数在<dirent.h>头文件中声明,它利用被称为目录流的指针DIR* 用来完成各种目录操作,目录的有关数据在dirent结构中返回。

#include <sys/types.h>
#include <dirent.h>
DIR* opendir(const char* name);
struct dirent* readdir(DIR* dirp);
long int telldir(DIR* dirp);
void seekdir(DIR* dirp,long int loc);
int closedir(DIR* dirp);

opendir打开一个目录并建立一个目录流,返回的指向DIR结构的指针用于读取目录数据项。失败时返回一个空指针。目录流利用底层的文件描述符来访问目录的。
readdir返回一个指针,指向的结构里保存着目录流dirp中下一个目录项的有关资料。发生错误或到达文件尾时返回NULL。返回的结构中的成员如下

ino_t d_ino;//文件的inode节点号
char d_name[];//文件的名字

telldir函数返回目录流里的当前位置,seekdir函数利用该值设置目录流dirp的指针位置。
closedir函数关闭一个目录流并释放相关资源,成功时返回0,错误时返回-1。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值