文件I/O操作(二)

文件I/O操作



文件类型

终端输入“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个字符,表示文件的类型;第24位,代表文件所有者(User)的权限,分别为读、写、执行;第57位,代表文件所有者的同组用户(Group)的权限,分别是读、写、执行;第810位,代表其他用户(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分界符

文件的创建、打开和关闭

1open函数

#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其他用户组的读写执行权限

2creat函数

#include

#include

#include

int creat(const char *pathname,mode_t mode);

返回:若成功,返回以只写方式打开的文件描述符,若出错为-1

creat函数等效于:

open(pathname,O_WRONLY | O_CREAT | O_TRUNC, mode);

3close函数

#include

int close(int fd);

返回:若成功返回0,若出错返回-1。参数fd是需关闭文件的文件描述符。

当一个进程终止时,它所有的打开文件都由内核自动关闭。

你可能感兴趣的:(文件I/O操作(二))