《Unix&Linux系统编程》第八章学习笔记

第8章 使用系统调用进行文件操作

8.1 系统调用

简称syscall,是一种允许进程进入Kmode以执行Umode不允许操作的机制。

8.2 系统调用手册页

在Ubuntu Linux中,手册页保存在/usr/share/man目录中,man2子目录中列出了所有的系统调用手册页。

  • man 2 NAME :显示系统调用名称的手册页

8.3 使用系统调用进行文件操作

系统调用必须由程序发出,用法就像函数调用。每个系统调用都是一个库函数,它汇集系统调用参数,并最终向操作系统内核发出一个系统调用。

access: 检查对某个文件的权限

int access(char *pathname, int mode);

chdir: 更改目录

int chdir(const char *path);

chmod:更改某个文件的权限

int chmod(char *path, mode_t mode);

chown:更改文件所有人

int chown(char *name,int uid,int gid);

chroot:将(逻辑)根目录更改为路径名

int chroot(char *pathname);

getewd:获取CWD的绝对路径名

char *getcwd(char *buf, int aize);

mkdir:创建目录

tnt mkdir(char *pathname,mode_t mode);

rmdir:移除目录(必须为空)

int rmdir(char *pathname);

link:将新文件名硬链接到旧文件名

tnt 1ink(char *o1dpath,char *newpath);

umlink:减少文件的链接数;如果链接数达到0,则删除文件

int unlink(char *pathname);

symlink:为文件创建一个符号链接

int symlink(char *o1dpath, char*newpath);

rename:更改文件名称

int rename (char *oldpath, char *newpath);

utime:更改文件的访问和修改时间

int utime(char *pathname, struct utimebuf *time)

以下系统调用需要超级用户权限

mount: 将文件系统添加到挂载点目录上

int mount(char *specialfile, char *mountDir);

umount: 分离挂载的文件系统

int umount(char *dix);

mknod: 创建特殊文件

int mknod(char *path,int mode, int device);

8.4 常用的系统调用

  • stat:获取文件状态信息

  • open:打开一个文件进行读、写、追加

  • close:关闭打开的文件描述符

  • read:读取打开的文件描述符

  • write:写入打开的文件描述符

  • lseek:重新定位文件描述符的读/写偏移量

  • dup:将文件描述符复制到可用的最小描述符编号中

  • dup2:将oldfd复制到newfd中,如果newfd已打开,先将其关闭

  • link:将新文件硬链接到旧文件

  • unlink:取消某个文件的链接,如果文件链接数为0,则删除文件

  • symlink:创建一个符号链接

  • readlink:读取符号链接文件内容

  • umask:设置文件创建掩码,文件权限为(mask&~umask)

8.5 链接文件

(1)硬链接文件

命令:

ln oldpath newpath 

(创建从newpath到oldpath的硬链接)
系统调用:

link(char *oldpath,char *newpath)
unlink(char *pathname)

(2)符号链接文件
命令:

ln -s oldpath newpath

系统调用:

symlink(char *oldpath,char *newpath)

8.6 stat系统调用

  • stat文件状态
    stat按文件名统计指向文件,并在缓冲区中填写stat信息
  • stat结构体
  • stat与文件索引节点
    每个索引节点在存储设备上都有唯一的索引节点编号(ino)
  • 文件类型和权限
    st_mode是16位,前4位是文件类型,接下来的3位表示文件的特殊用法,其余9位是文件保护权限位。
  • opendir-readdir函数
  • readlink函数
  • ls程序
posted @ 2022-09-25 20:50  少管我  阅读(40)  评论(0编辑  收藏  举报