zoukankan      html  css  js  c++  java
  • Unix/Linux系统编程第八章学习笔记

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

    作者:20191322wyl

    知识点总结

    系统调用手册

    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结构体
    • stat与文件索引节点
    • 文件类型和权限
    • opendir-readdir函数
    • readlink函数
    • ls程序

    实践

    内容:创建多个目录

    过程:

    问题与解决

    问题

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

    解决

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

    在linux中,进程是通过文件描述符(file descriptors 简称fd)来访问文件的,文件描述符实际上是一个整数。在程序刚启动的时候,默认有三个文件描述符,分别是:0(代表标准输入),1(代表标准输出),2(代表标准错误)。再打开一个新的文件的话,它的文件描述符就是3。
    POSIX标准规定,每次打开的文件时(含socket)必须使用当前进程中最小可用的文件描述符号码。
    文件描述符的创建
    进程获取文件描述符最常见的方法就是通过系统函数open或create获取,或者是从父进程继承。
    从父进程继承的话,子进程就可以访问父进程所使用的文件。我们再深入想想,进程是独立运行的,互不干扰,如果父子进程要通信的话,是不是就可以通过这些都能访问的文件入手。
    文件描述符对于每一个进程是唯一的,每个进程都有一张文件描述符表,用于管理文件描述符。当使用fork创建子进程的话,子进程会获得父进程所有文件描述符的副本,这些文件描述符在执行fork时打开。在由fcntl、dup和dup2子例程复制或拷贝某个进程时,会发生同样的复制过程。

    文件描述符的作用
    文件描述符
    通过文件的描述符·,来访问指定的文件,以及对指定的文件进行操作。
    套接字描述符
    通过socket访问指定的访问指定的连接端口,以及该端口对应的信息。例如·:服务器通过指定端口向指定客户端发送数据或则接收该客户端的数据。
    s/c网络编程模型中,对某个客户端进行操作时就要指定该客户端相应的clifd。

    参考链接

  • 相关阅读:
    独立人格,让人生更美好
    版本控制入门简介
    Android蓝牙操作
    Android Rect和RectF的区别
    做个环保主义的程序员
    java/android下JNI编程总结
    别太单纯,也别太不单纯
    C++ namespace的用法
    JNI编程
    企业架构 - 架构原则
  • 原文地址:https://www.cnblogs.com/BillGreen/p/15390587.html
Copyright © 2011-2022 走看看