Linux-文件I/O
open()
需要包含的头文件:
<sys/types.h> <sys/stat.h> <sys/fcntl.h>
格式:
int open(const str *pathname, int oflag, [..., mode_t mode])
pathname:打开或创建文件的全路径名;
oflag:函数的多个处理方式,详情见下表;
mode_t:用于创建文件时设置文件权限。
oflag参数说明:
O_RDONLY | 只读模式 |
O_WRONLY | 只写模式 |
O_RDWR | 读写模式 |
O_APPEND | 追加到文件尾 |
O_CREATE | 文件不存在时创建,有次参数的时候open函数要设置第三个参数,为文件添加权限 |
O_EXCL | 如果同时指定O_CREATE而该文件又是存在的,报错。也可以测试一个文件是否存在,不存在则报错 |
O_TRUNC | 如果此文件存在,并且以只读或只写模式打开,则将此文件截断为0 |
O_SYNC | 使每次write操作都等到物理I/O操作完成 |
示例:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fnctl.h>
#include <sys/stat.h>
#define FILE_PATH "./test.txt"
int main(void)
{
int fd;
if((fd = open(FILE_PATH, O_RDWR | O_CREAT | O_EXCL, 0666)) < 0) {
printf("create error\n");
exit(-1);
} else {
printf("create success\n");
}
return 0;
}
如果当前目录下存在text.txt,屏幕上就会打印”create error”,否则创建该文件,并打印”create success”。
read
需要包含的头文件:
<unistd.h>
函数原型:
ssize_t read(int fd, viod * buf, size_t count)
功能:从打开的文件中读取数据位置。
返回值:实际读到的字节数;已读到文件尾返回0,出错返回-1,ssize_t是系统头文件中用typedef定义的数据类型,相当于signed int。
参数说明:
fd:要读取的文件的描述符;
buf:得到的数据在内存中的位置的首地址;
count:期望本次能读取到的最大字节数。size_t是系统头文件中用typedef定义的数据类型,相当于unsigned int。
write
需要包含的头文件:
<unistd.h>
函数原型:
ssize_t write(int fd, const void * buf, size_t count)
功能:向打开的文件写数据。
返回值:写入成功返回世界写入的字节数,出错返回-1。(注意:返回-1的常见原因是:磁盘空间已满,超过了一个给定进程的文件长度。)
参数:
fd:要写入文件的文件描述符;
buf:要写入文件的数据在内存中存放位置的首地址;
count:期望写入的数据的最大字节数
read、write使用示例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
char buf[100];
int num=0;
//获取键盘输入
if((num = read(STDIN_FILENO, buf, 10)) == -1) {
printf("read error");
error(-1);
} else {
//将键盘输入又输出到屏幕上
write(STDOUT_FILENO, buf, num);
}
return 0;
}
结果:
close
需要包含的头文件:
unistd.h
函数原型:
int close(int filedes)
功能:关闭一个打开的文件(注:当一个进程中止的时候,它所以打开的文件都是由内核自动关闭的,很多功能都已使用这一功能却没有显式地调用close。但是作为一个优秀的程序员应该显式地关闭不再使用的文件)。
参数:需要关闭文件的文件描述符。
lseek
需要包含的头文件:
sys/types.h unistd.h
函数原型:
off_t lseek(int filesdes, off_t offset, int whence)
功能:设置文件内容读写位置。
返回值:成功返回新的文件位移,出错时返回-1;同样的,off_t是系统头文件定义的数据类型,相当于signed int。
参数whence:
whence | 文件位移量 |
SEEK_SET | 从文件开始的处offset个字节 |
SEEK_CUR | 当前值+offset,offset可正可负 |
SEEK_END | 文件长度+offset,offset可正可负 |
上一篇: Path之PathMeasure 进阶篇
推荐阅读
-
MySQL TroubleShoting:无任何操作、磁盘I/O负载跑满
-
Oracle 11g等待事件:db file async I/O submit
-
Datastage parallel routine aix unix hp-ux编译c程序 .o文件 .a文件 HPAIXCC++C#
-
磁盘 I/O 性能监控指标和调优方法_MySQL
-
Java自学-I/O Stream流
-
python 之 并发编程(非阻塞IO模型、I/O多路复用、socketserver的使用)
-
第十八章:Java I/O系统
-
Java开发笔记(八十九)缓存字节I/O流
-
SQL芯片可优化MySQL数据仓库 最主要能缓解I/O瓶颈
-
关于Node异步 I/O的介绍