========================================================================
系统io最重要的四个函数,打开open,关闭close,读取read,写入write
========================================================================
1、int open(const char *pathname,int flags,mode_t mode);
//打开某个文件,该函数有两种形式,另外一种比较常用,int open(const char *pathname,int flags);
头文件: #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h>
参数: const char *pathname 打开文件的路径。
int flags; 打开文件的方式。
================================================================
常用的flag:
O_RDONLY O_WRONLY O_RDWR //读写的方式
O_CREATE //如果文件不存在就创建。
O_TRUNC //如果文件存在就清空里面的内容
O_APPEND //以追加的方式打开文件
===============================================================
mode 如果文件被新建,指定其权限。
返回值:成功:return 0(文件描述符); 失败:return -1;
===============================================================
系统默认打开 标准输入,标准输出和标准出错三个文件,即键盘,屏幕,屏幕三个文件(linux里面一切东西都是文件)
,屏幕打开了两次。所以我们文件描述符一般会从3开始。
===============================================================
2、int close(int fd) ;
//关闭某个打开的文件,和open函数配合使用
头文件: #include<unistd.h>
参数: fd //打开文件的文件描述符
返回值:成功:return 0; 失败:return 1;
3、ssize_t read(int fd,void *buf,size_t count)
//读取文件fd的内容。
头文件:#include<unistd.h>
参数: fd: 文件描述符。
buf: 指向存放读到的数据缓冲区。
count: 要读多少个字节。
返回值:成功:return 实际读取的字节数; 失败:return -1;
4、ssize_t write(int fd,const void*buf,size_t count)
//向文件fd中写入count个字节
头文件:#include<unistd.h>
参数: fd: 文件描述符。
buf: 指向即将要写入的数据。
count: 要写多少个字节。
返回值:成功:return 实际写入的字节数; 失败:return -1;
======================================================================
其它常用函数
======================================================================
5、 off_t lseek(int fd,off_t offset,int whence);
//该函数主要用于调整文件位置,例如你写一个文件,可以从头开始写,也可以从末尾开始写,当然有时候也会从某个位置写,//那么就会使用到该函数。
头文件:#include<sys/types.h> #include<unistd.h>
参数: fd: 文件描述符
offset: 新位置相对于基准点的偏移
whence: 基准点。
--------------------------------------------------------------------------------------
SEEK_SET: 文件开头处。 SEEK_CUR:文件当前位置。 SEEK_END:文件末尾处。
----------------------------------------------------------------------------------------
返回值:成功:return 新文件位置偏移量; 失败:return -1;
6、dup和dup2函数
//重定向函数,这个函数很容易理解,但用的时候要小心小心再小心,一不小心标准输出就没了
dup(int oldfd);
dup2(int oldfd , int newfd);
//常用dup2,用newfd这个描述符代替oldfd。
头文件 #include<unistd.h>
参数: oldfd : 要替换的文件描述符
newfd:替换成newfd文件符。
返回值:成功:return 新的描述符; 失败:return -1;
7、mmap函数
//内存映射函数,lcd屏的内存映射。
void *mmap(void *addr,size_t length , int prot , int flags , int fd , off_set);
参数:
addr: 一般填入NULL即可,表示系统自动帮我们安排一块内存,并且给我们入口,返回值即为入口。
length: 映射内存的大小。
prot: 权限
-----------------------------------------------------------------------------------------------------
PROT_EXEC 可执行。 PROT_READ 可读。 PROT_WRITE 可写。 PROT_NONE 不可访问。
------------------------------------------------------------------------------------------------------
flags: 一般用MAP_SHARED,表示文件在这块内存的进程对数据的变更均可见。
fd: 文件描述符。
offset: 文件映射的开始区域偏移量,看具体情况填入数值即可,必须是页内存的 整数倍,即函数
sysconf(_SC_PAGE_SIZE)的整数倍,一般填0就行了。
返回值:成功:return 这块内存的入口指针; 失败:return (void *) -1;
最后记得free掉这个指针。