天天看点

Unix/Linux系统编程第八章学习笔记

Unix/Linux系统编程第八章学习笔记

作者:20191322wyl

目录

    • 知识点总结
      • 系统调用手册
      • 使用系统调用进行文件操作
      • 链接文件
        • 硬链接文件
        • 符号链接文件
      • stat系统调用
    • 实践
    • 问题与解决
      • 问题
      • 解决

Unix以及大多数版本的Linux中,在线手册页保存在/usr/man/目录中。man2子目录中列出了所有系统调用手册页。sh命令man2 NAME显示了系统调用名称的手册页。

系统调用必须由程序发出。它们的用法就像普通函数调用一样。

简单的系统调用:

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);

常用的系统调用:

stat: 获取文件状态信息

int stat(char *filename,struct stat *buf)
int fstat(int filedes,struct stat *buf)
int lstat(char *filename,struct stat *buf)
           

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

int open(char *file, int flags,int mode)

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

int close(int fd)

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

int read(int fd, char buf[], int count)

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

int write(int fd, char buf[ ], int count)

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

int 1seek(int fd, int offset, int whence)

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

int dup(int oldfd);

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

int dup2(int oldfd, int newfd)

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

int link(char *oldPath, char *newPath)

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

int unlink(char *pathname);

symlink:创建一个符号链接

int symlink(char *target, char *newpath)

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

int readlink(char *path, char *buf, int bufsize)

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

int umask(int umask) ;

硬链接:命令

ln oldpath newpath

创建从newpath到oldpath的硬链接。对应的系统调用为:

link(char *oldpath,char *newpath)

硬链接文件会共享文件系统中相同的文件表示数据结构。文件链接会记录链接到同一索引结点的硬连接数量。硬链接仅适用于非目录文件。否则,可能会在文件系统名称中创建循环。相反,系统调用:

unlink(char *pathname

会减少文件的链接数。如果链接变为0,文件就被完全删除。

软链接:命令

ln -s oldpath newpath #in command with the -s flag

创建从newpath到oldpath的软链接或符号链接。对应的系统调用是:

symlink(char *oldpath,chat *newpath)

newpath是LNK类型的普通文件,包含oldpath字符串。它可作为一个绕行标志,使访问指向链接好的目标文件。与硬链接不同,软链接适用于任何文件,包括目录。

  • stat文件状态
  • stat结构体
  • stat与文件索引节点
  • 文件类型和权限
  • opendir-readdir函数
  • readlink函数
  • ls程序

内容:创建多个目录

过程:

Unix/Linux系统编程第八章学习笔记

文件描述符的作用是什么?

对文件描述符的理解

在linux下一切皆文件,文件描述符是内核为了高效的管理已经被打开的文件所创建的索引,它是一个非负整数,用于指代被打开的文件,所有执行I/O操作的系统调用都是通过文件描述符完成的。