Linux之文件属性、文件模式和文件操作

Linux文件属性

Linux的大多数资源以文件形式存在,分为以下几类(前面的符号为属性位):

  • 普通文件:以字节为单位进行访问。用Is -l查看某个目录时,第一个属性为-的表示普通文件。
  • 管道:p(pipe的简写),分为有名管道、无名管道两种,是建立在内存之上可以同时被两个进程访问的文件。
  • 目录:d(directory的简写),也称为目录文件,为了实现文件目录的管理,通常将文件目录以文件的形式保存在外存空间,这个文件就被称为目录文件。 目录文件是长度固定的记录式文件。
  • 设备:c(character的简写)字符特殊文件、b(block的简写)块特殊文件
  • 符号链接:l(Link的简写),到达另一个文件的路径。
  • 套接字:s(socket的简写),在不同机器间通信。

文件模式

Linux的文件模式,一个16bit位的域,一般由八进制来表示。文件模式均放于一个数据机构mode_t中,以S_I开头即S_Ixxx的形式表示。包括以下三个部分:

  • 文件的类型:4位,表示普通文件,目录文件,字符设备文件,块设备文件,管道,符号链接,套接字。
  • 文件修饰位:3位,设置用户ID位,设置组ID位
  • 文件的访问位:9位,3位一组,八进制表示。最前面的一组3位控制属主的访问权限,第二个三位组控制组的访问权限,最后的三位组控制其他每个人访问权限。在每个3位组中,高位是读取位,中间位是写入位,低位是执行位。如下表:
r v x r v x r v x
0 0 0 0 0 0 0 0 0
属主权限位 属组权限 其他人权限

对文件的操作

(1)系统调用

  • 系统调用可以直接访问内核提供的丰富功能,是内核的低级接口
  • 系统调用存在于内核空间,使用不当也许会损坏系统
  • 对文件的操作使用文件描述符:整数

(2)库函数

  • 库函数属于Linux编程接口中的较高层接口
  • 库函数存在于用户空间,对系统危险较小
  • 对文件的操作使用文件指针:FILE*
    实际上很多库函数都是利用系统调用来实现的。

打开与关闭文件

Linux之文件属性、文件模式和文件操作
文件的打开方式:

  • r:只读
  • r+:读写
  • w:只写
  • w+:读写
  • a:只追加
  • a+:读、追加

Linux之文件属性、文件模式和文件操作

读写文件

Linux之文件属性、文件模式和文件操作

Linux之文件属性、文件模式和文件操作

删除文件与文件改名

删除文件:
#include<stdio.h>
int remove(const char* pathname)
执行成功返回0,否则返回1

文件改名:
#include<stdio.h>
int rename(const char* oldpath,const char* newpath)执行成功返回0,否则返回1