文件类型
终端输入“ls -l”查看当前目录下所有文件的信息:
drwxr-xr-x. 2 anxier anxier 4096 1月 15 00:29 desktop
drwxr-xr-x. 4 anxier anxier 4096 1月 3 13:31 document
drwxrwxr-x. 6 anxier anxier 4096 1月 11 00:00 workspace
第一栏的信息包含10字符。第1个字符,表示文件的类型;第2~4位,代表文件所有者(User)的权限,分别为读、写、执行;第5~7位,代表文件所有者的同组用户(Group)的权限,分别是读、写、执行;第8~10位,代表其他用户(Other)的权限,分别为读、写、执行。
位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
|
r |
w |
x |
r |
w |
x |
r |
w |
x |
第1位为Linux文件类型符号:
符号 |
文件类型 |
符号 |
文件类型 |
- |
普通文件 |
d |
目录文件 |
l |
链接文件 |
b |
块设备文件 |
c |
字符设备文件 |
p |
管道文件 |
s |
套接口文件 |
|
|
1、普通文件
分为文本文件和二进制文件。是计算机用户和操作系统用于存放数据、程序等信息的文件。
2、目录文件
是文件系统中一个目录所包含的目录项组成的文件,只允许系统进行修改,用户进程可以读取目录文件,但不能进行修改。
3、设备文件
用于操作系统与I/O设备提供连接的一种文件,分为字符设备文件和块设备文件。
4、链接文件
又称为符号链接文件,它提供了共享文件的一种方法,在链接文件中不是通过文件名实现文件共享,而是通过链接文件所包含的指向文件的指针来实现对文件的访问。链接文件可以在不同文件系统之间建立一种链接关系。
5、管道文件
主要用于在进程间传递数据,是Linux进程间的一种通信机制。
6、套接口文件
主要用于在不同计算机的进程间的通信,也称为套接字。
分为3种:流式套接口、数据报套接口和原始套接口。流式套接口就是TCP套接口(面向连接的套接口),数据报套接口就是UDP套接口(无连接的套接口),原始套接口用“SOCK_RAW”表示。
文件重定向
1、重定向标准输出
command > filename #把标准输出重定向到filename文件中
command >> filename #把标准输出重定向到filename文件中,方式是追加在现有内容的后面
command 1> filename #把标准输出重定向到一个文件中
> myfile #创建一个长度为0的空文件
2、重定向标准输入
command < filename #以filename文件的内容作为command命令的标准输入
command < file1 > file2 #以file1文件的内容作为command命令的标准输入,并以file2文件作为命 #令执行结果的标准输出
command << delimiter #从标准输入中读入,直至遇到delimiter分界符
3、重定向标准出错
command 2> filename #把标准出错信息重定向到filename文件中
command 2>> filename #把标准出错信息重定向到一个文件中(追加)
command 1> file1 2> file2 #将标准输出重定向到file1中,然后再把标准出错重定向到file2
command > filename 2> &1 #把标准输出和标准出错一起重定向到filename文件中
command >> filename 2> &1 #把标准输出和标准出错一起重定向到filename文件中(追加)
command > filename 2> &1 << delimiter #把标准输出和标准出错一起重定向到filename文件中,直 #至遇到delimiter分界符
文件的创建、打开和关闭
1、open函数
#include
#include
#include
int open(const char *pathname,int flags); //打开一个现有的文件
int open(const char *pathname,int flags,mode t_mode); //打开文件不存在,则先创建
参数flags用于描述文件打开方式的,常数定义在头文件中。
flags的取值及其含义:
flags的值 |
含义 |
O_RDONLY |
以只读方式打开文件 |
O_WRONLY |
以只写方式打开文件 |
O_RDWR |
以读写方式打开文件 |
O_CREAT |
若所打开文件不存在则创建此文件。使用此选择项时,需同时使用第三个参数mode说明该新文件的存取许可权位 |
O_EXCL |
如果同时指定了O_CREAT,而文件已经存在,则导致调用出错 |
O_TRUNC |
如果文件存在,而且为只读或只写方式打开,则将其长度截断为0 |
O_NOCTTY |
如果pathname指的是终端设备(tty),则不将此设备分配作为此进程的控制终端 |
O_APPEND |
每次写时都加到文件的尾端 |
O_NONBLOCK |
如果pathname指的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I/O操作设置为非阻塞方式 |
O_NONELAY |
O_NONBLOCK |
O_SYNC |
只在数据被写入外存或者其他设备之后操作才返回 |
参数mode的取值及其含义:
mode取值 |
对应八进制数 |
含义 |
S_ISUID |
04000 |
设置用户识别号 |
S_ISGID |
02000 |
设置组识别号 |
S_SVTX |
01000 |
粘帖位 |
S_IRUSR |
00400 |
文件所有者的读权限位 |
S_IWUSR |
00200 |
文件所有者的写权限位 |
S_IXUSR |
00100 |
文件所有者的执行权限位 |
S_IRGRP |
00040 |
所有者同组用户的读权限位 |
S_IWGRP |
00020 |
所有者同组用户的写权限位 |
S_IXGRP |
00010 |
所有者同组用户的执行权限位 |
S_IROTH |
00004 |
其他用户的读权限位 |
S_IWOTH |
00002 |
其他用户的写权限位 |
S_IXOTH |
00001 |
其他用户的读执行权限位 |
头文件中定义了3个常用的逻辑组合:
S_IRWXU=S_IRUSR | S_IWUSR | S_IXUSR 文件所有的读写执行权限
S_IRWXG=S_IRGRP | S_IWGRP | S_IXGRP文件所有者同组用户的读写执行权限
S_IRWXO=S_IROTH | S_IWOTH | S_IXOTH其他用户组的读写执行权限
2、creat函数
#include
#include
#include
int creat(const char *pathname,mode_t mode);
返回:若成功,返回以只写方式打开的文件描述符,若出错为-1;
creat函数等效于:
open(pathname,O_WRONLY | O_CREAT | O_TRUNC, mode);
3、close函数
#include
int close(int fd);
返回:若成功返回0,若出错返回-1。参数fd是需关闭文件的文件描述符。
当一个进程终止时,它所有的打开文件都由内核自动关闭。