全部博文(842)
分类: LINUX
2012-04-09 23:27:12
open 函数
#include
#include
#include
int open(const char *pathname, int oflag, …/*, mode _t mode * / ) ;
功能:打开文件
返回: 若成功为文件描述符,若出错为 -1,出错时errno被设置
pathname 是要打开或创建的文件的名字。
oflag 参数可用来说明此函数的多个选择项。
对于 open 函数而言 ,仅当创建新文件时才使用第三个参数。
注 : 第 三参数 … , I S O C 表示参数类型和个数不定 .
oflag 值:
O_R DONL Y:只读打开;
O_WRONL Y:只写打开; 此三者必选其一
O_R D WR:读、写打开
O_APPEND:每次写时都加到文件的尾端
O_CR EAT:若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode ,用其说明该新文件的存取许可权位
O_EX CL:如果同时指定了 O_CR EAT ,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作
O_TRUNC:如果此文件存在,而且为只读或只写成功打开,则将其长度截短为 0
O_NOCTTY:如果 pathname 指的是终端设备,则不将此设备分配作为此进程的控制终端
O_NON BLOCK:如果 pathname 指的是一个 FIFO 、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的 I / O 操作设置非阻塞方式
O_SYNC:使每次 write 都等到物理 I / O 操作完成
MODE
S_ I RWX U | 用户主的读写和 执行权 |
S_ I RU SR | 用户读 |
S_ I W USR S_ I X USR | 用户写 用户 执行 |
S_ I RWXG | 组的读写 执 行 |
S_ I RGRP | 组读 |
S_ I WGRP | 组写 |
S_ I XGRP | 组执 行 |
S_ I RWX O | 其它 人的读写 执 行 |
S_ I ROTH | 其它 人读 |
S_ I W OTH | 其它 人写 |
S_ I X OTH | 其它 执行 |
creat 函数
# include
# include
# include
int creat(const char * pathname, mode _ t mode) ;
功能: 创建一个新的文件。
返回: 若成功为 只 写打开的文件描述符, 若出错为 - 1 。
注意,此函数等效于:. open (pathname, O _WR ONL Y | O _CR EAT | O_TRUNC, mode) ;
creat 的一个不足之处是它以只写方式打开所创建的文件。
close 函数
# include
int close (int filedes) ;
功能:关闭一个打开文件
返回: 若成功为0 ,若出错为 - 1
当一个进程终止时,它所有的打开文件都由内核自动关闭。很多程序都使用这一功能而不显式地用close关闭打开的文件。
lseek 函数
每个打开文件都有一个与其相关联的“当前文件偏移量”。它是一个非负整数,用以度量从文件开始处计算的字节数。通常,读、写操作都从当前文件偏移量处开始,并使偏移量增加所读或写的字节数。按系统默认 ,当打开一个文件时,除非指定O _APP END 选择项,否则该位移量被设置为 0 。
可以调用 lseek 显式地定位一个打开文件。
# include
# include
off _ t lsee k (int filesdes, off _t offset, int whence) ;
功能:设置文件内容读写位置
返回: 若成功为新的文件位 移 ,若 出错为 - 1 。
对参数 offset 的解释与参数 whence 的值 有关。
若whence是SEEK_SET,则将该文件的位移量设置为距文件开始处offset 个字节。
若whence是SEEK_CUR,则将该文件的位移量设置为其当前值加offset,offset 可为正或负。
若 whence 是SEEK_END,则将该文件的位移量设置为文件长度加 offset,offset 可为正或负。
read 函数
#include
ssize_t read(int fd, void *buf, si ze_t count);
功能: 从打开文件中读数据
返回:读到的字节数,若已到文件尾为0,若出错为- 1。
有多种情况可使实际读到的字节数少于要求读字节数:
读普通文件时,在读到要求字节数之前已到达了文件尾端。例如,若在到达文件尾端之前还有30个字节,而要求读100个字节,则read返回 3 0 ,下一次 再调用read时,它将返回0(文件尾端)。当从终端设备读时,通常以行为单位,读到换行符就返回。
当从网络读时,网络中的缓冲机构可能造成返回值小于所要求读的字节数。
某些面向记录的设备,例如磁带,一次最多返回一个记录。
读操作从文件的当前位移量处开始,在成功返回之前,该位移量增加实际读得的字节数。
write 函数
#include
ssize_t write(int fd, const void *buf, size_t count);
功能;向打开文件写数据。
返回:若成功为已写的字节数,若出错为-1。
其返回值通常与参数count的值不同,否则表示出错。write出错的一个常见原因是:磁盘已写满,或者超过了对一个给定进程的文件长度限制。
对于普通文件,写操作从文件的当前位移量处开始。如果在打开该文件时,指定了O_APP END选择项,则在每次写操作之前,将文件位移量设置在文件的当前结尾处。在一次成功写之后,该文件位移量增加实际写的字节数。
pread & pwrite 函数
ssi ze_t pread(int filedes, void *buffer, size_t size, off _t offset)
ssi ze_t pwrite(int filedes, const void *buffer, size_t size, off _t offset)
类似于read和write,只是读写不是从文件当前位置开始,而是从offset位置开始,并且函数执行完后也不影响当前文件指针位置,即指针位置不改变。
fcntl 函数
#include
#include
int fcntl(int filedes, int cmd, ... ) ;
功能:改变已经打开文件的性质
返回:若成功则依赖于cmd(),若出错为-1。
fcntl 函数有五种功能:
复制一个现存的描述符,新文件描述符作为函数值返(cmd=F_DUPFD)。
获得/设置文件描述符标记,对应于filedes的文件描述符标志作为函数值返回.(cmd=F_GET FD或F_SETFD)。
获得/设置文件状态标志,对应于filedes的文件状态标志作为函数值返回。(cmd=F_GETFL或F_SETFL)。
获得/设置异步I/O(cmd=F_GETOWN或F_SETOWN)。
获得/设置记录锁(cmd=F_SETLK,F_SETLKW)
文件状态 | 标志说明 |
O _R DONL Y | 只读打开 |
O _WR ONL Y | 只写打开 |
O _R D WR | 读 / 写打开 |
O_APP END | 写时都添加至文件尾 |
O _ NON B LOC K | 非阻塞方式 |
O _SY NC | 等待写完成 |
O _ASY NC | 异步 I / O |
ioctl 函数
ioctl函数是I /O操作的杂物箱。不能用本章中其他函数表示的I/O操作通常都能用ioctl表示。终端I/O是ioctl的最大使用方面,主要用于设备的I/O控制。
#include
int ioctl(int filedes, int request, . . . ) ;
返回:若出错则为-1,若成功则为其他值。
例如:串口线上传送的数据通过read、write来操作,而串口的波特率、校验位、停止位可以通过ioctl来设置。
测试文件类型
类型,即文件的分类(例如:它是一个普通文件,还是符号链接,还是某种特殊文件)
使用 stat 函数取得文件的状态信息以进行测试
#include
int stat(const char * path, struct stat *sbuf);
stat提供有关文件的丰富信息,包括大小、所有者、组、最后修改时间等。
int fstat(int fd, struct stat *sbuf);
fstat功能和stat相同,只是通过文件描述符来进行操作,而不是通过文件名。
函数出错返回 -1 ,否则返回 0
struct stat 结构
struct stat {
mode_t st_mode; // 文件对应的模式,文件, 目录等
ino_t st_ino; //inode 节点号
dev _