linux_c编程:Linux文件系统

  1. 系统编程

    系统编程是指程序员使用系统调用或c语言本身所携带的库函数来设计和编写具有某一特定功能的程序。

  2. linux的文件系统

    linux重要的一个概念就是linux下一切皆文件,从根目录开始,逐渐形成了目录树结构 :
    /:最上一级的目录,所有目录都被根目录所包含。

    /bin:linux系统下存放的普通用户可以执行的目录,也是所有用户都可以执行的普通命令。

    /boot:linux系统的内核及启动系统时所需要的文件,因为比较重要,所以一般放在独立的分区上。

    /dev:设备文件的目录。

    /etc:系统的配置文件,比如用户帐号和密码。

    /home:家目录。

    /lib:用户存放各种库文件。

    /proc:虚拟文件系统,用作内存与磁盘的交换区。

    /root:超级用户,拥有整个系统最高的权限。

    /sbin:存放的是用于管理系统的命令。

    /tmp:临时文件目录。

    /usr:存放系统应用程序及其相关文件。

    /var:系统中经常变化的文件,日志文件,用户邮件等。

  3. linux文件系统模型

    统一的应用程序编程接口(API)。

    虚拟文件系统(VFS):正因为它体现了linux文件系统的最大特点-支持多种不同的文件系统。

  4. 文件的分类

    普通文件

    目录文件

    字符特殊文件:字符类型的文件,比如键盘,鼠标等。

    块特殊文件:块类型的设备,比如硬盘,光驱。

    FIFO:进程间的通信,也叫命名管道。

    套接字:主要用于网络通信。

    符号链接:指向另一个文件,是对另一个文件的引用。
    符号链接注
    1.硬链接:相当于一个文件的拷贝,对这个硬链接文件的操作会影响到原有的文件,如果删除这个硬链接,那么源文件也会被删除。占用inode。
    2.软链接:相当于一个文件的快捷方式,不占用inode,对软链接文件的操作不会影响原有的文件。

    一个目录下的本目录和父目录是一个硬链接。

5.文件的访问权限控制

  • 在shell里可以用chmod来设置一个文件的访问权限。
  • 在进行程序设计时,可以用chmod这个函数:
#include<sys/types.h>
#include<sys/stat.h>
chmod(const char * path, mode)
fchmod(fd, mode)
//权限更改成功返回0,失败返回-1。
//错误代码可以由perror函数进行获取,具体用法请自行百度。

关于参数mode的数值,有如下这么多的值:
S_IRUSR:文件所有者具有可读权限
S_IWUSR:文件所有者具有可写权限
S_IXUSR:文件所有者具有可执行的权限
S_IRGRP;S_IWGRP;S_IXGRP;
S_IROTH;S_IWOTH;S_IXOTH;
这六个权限和上面是对应的,可以根据英文明白他们的意思,就不一一赘述了。
还有三个特殊的权限需要明确的说一下:
S_ISUID:只有文件所有者和root用户可以删除这个文件。
S_ISGID:一个用户会获得对这个文件所有组的权限。
S_ISVTX:如果在一个执行文件设置了该位,则执行该文件且进程结束后,系统会把该进程的正文部分放置磁盘的交换区中,在交换区中文件是连续存放的,不像非交换区一样,一个文件的内容分散在磁盘的几个块中。所以在加载该执行文件时就可以加快速度启动,直接从交换区中把进程的正文部分取至内存中运行。
现今的系统扩展了该位的使用范围,比如说针对目录设置该位,则只有对该用户具有写权限的用户在满足以下条件时才能删除或更名该目录下的文件:
(1)拥有此文件;
(2)拥有此目录;
(3)超级用户权限

文中如有错误欢迎在评论区进行指出,共勉。

你可能感兴趣的:(编程,linux,文件系统)