《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程序