一切皆文件
文件的概念
在 Linux 中,有一句经典的话叫做:一切皆文件。这句话是站在内核的角度说的,因为 在内核中所有的设备 (除了网络接口) 都一律使用 Linux 独有的虚拟文件系统 (VFS) 来管 理。这样做的最终目的,是将各种不同的设备用“文件”这个概念加以封装和屏蔽,简化应 用层编程的难度。文件,是 Linux 系统最重要的两个抽象概念之一 (另一个是进程) 。
七类文件
1,普通文件 (regular) :存在于外部存储器中,用于存储普通数据。
2, 目录文件 (directory) :用于存放目录项,是文件系统管理的重要文件类型。
3,管道文件 (pipe) :一种用于进程间通信的特殊文件,也称为命名管道 FIFO。
4,套接字文件 (socket) :一种用于网络间通信的特殊文件。
5,链接文件 (link) :用于间接访问另外一个目标文件,相当于 Windows 快捷方式。
6,字符设备文件 (character) :字符设备在应用层的访问接口。
7,块设备文件 (block) :块设备在应用层的访问接口
如下所示
注意到,每个文件信息的最左边一栏,是各种文件类型的缩写,从上到下依 次是:
b (block) 块设备文件
c (character) 字符设备文件
d (directory) 目录文件
l (link) 链接文件 (软链接)
p (pipe) 管道文件 (命名管道)
- (regular) 普通文件
s (socket) 套接字文件 (Unix 域/本地域套接字)
关于man使用
man1 shell命令
man2系统调用函数
man3标准c库函数
ls -l 文件名 查看若是可执行文件直接 ./文件命运行
系统 IO
要对一个文件进行操作,首先必须“打开”他,打开两个字之所以加上双引号,是因为 这是代码级别的含义,并非图形界面上所理解的“双击打开”一个文件,代码中打开一个文 件意味着获得了这个文件的访问句柄 (即 file descriptor,文件描述符 fd) ,同时规定了之 后访问这个文件的限制条件。
我们使用以下系统 IO 函数来打开一个文件:
功能
打开一个指定的文件并获得文件描述符,或者创建一个新文件
头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
原型
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
参数
pathname:即将要打开的文件
flags
O_RDONLY:只读方式打开文件
这三个参数互斥
O_WRONLY:只写方式打开文件
O_RDWR:读写方式打开文件
O_CREAT:如果文件不存在,则创建该文件。
O_EXCL:如果使用 O_CREAT 选项且文件存在,则返回错误消息。
O_NOCTTY:如果文件为终端,那么终端不可以作为调用 open()系统调 用的那个进程的控制终端。
O_TRUNC:如文件已经存在,则删除文件中原有数据。
O_APPEND:以追加方式打开文件。
mode
如果文件被新建,指定其权限为 mode (八进制表示法)
返回值
成功
大于等于 0 的整数 (即文件描述符)
失败
- 1
备注
无
三个参数互斥,表示只能用三个中的一个。
定义函数时 int 函数名
表示返回值为int 型
文件描述符:通过返回值赋给文件标签正确的文件一般从3开始赋值
其中键盘输入占用了0号位,显示屏输入输出各占用一个符号位。
编程时判断条件可这样写 if(常量==变量名)这样写可以防止常规敲代码if(变量名==常量)时遇到符号=少打出现的报错。
perror()用于打印报错信息
主函数传参
int main(int argc ,char **argv) argc 为传参的数量 argv为变量
主函数传参
strlen 和sizeof 的区别 strlen 计算buf实际的字节数 sizeof定义多少算出来多少
diff 文件名 文件名 用于比较两文件是否一样 ,若不一样输出不一样的内容