linux下文件操作函数
目录
- 1,错误处理函数
- 2,虚拟地址空间
- 3,文件描述符
- 4,open函数
1,错误处理函数
errno是记录系统的最后一次错误代码。代码是一个int型的值,在 errno.h中定义,查看错误代码 errno是调试程序的一个重要方法。
用strerror函数就可以查看errno错误的原因。
如下图所示。


perror函数,根据errno的值,解析出错误的原因。
如下图。


查看错误号: /usr/include/asm-generic/errno-base.h
2,虚拟地址空间
每个进程都会分配虚拟地址空间,在32位系统,该地址空间位4G。
Linux每一个运行的程序(进程)操作系统都会为其分配一个 0~4G的地址空间(虚拟地址空间)。
在进程里,平时所说的指针变量,保存的就是虚拟地址。当应用程序使用虚拟地址访问内存时,处理器(CPU)会将其转化为物理地址。

3,文件描述符
在 Linux 的世界里,一切设备皆文件。我们可以系统调用中 I/O 的函数(I:input,输入;O:output,输出)。对文件进行相应的操作(open(),close(),write(),read() 等)。
打开现存文件或新建文件时,系统(内核)会返回一个文件描述符,文件描述符用来指定已经打开的文件。
#define STDIN_FILENO 0 //标准输入
#define STDOUT_FILENO 1 //标准输出
#define STDERR_FILENO 2 //标准错误
在程序运行起来后,打开其他文件时,系统会返回文件描述符表中最小可用的文件描述符,并将此文件描述符记录在表中。

最大打开的文件个数
Linux中一个进程最多只能打开 NR_OPEN_DEFAULT (即1024)个文件,故当文件不再使用时应及时调用 close() 函数关闭文件。
查看当前系统允许打开最大文件个数:cat/proc/sys/fs/file-max
当前默认设置最大打开文件个数 1024
修改默认设置最大打开文件个数4069 :ulimit -n 4069
4,open函数
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>int open(const char *pathname , int flags);
int open(const char *pathname , int flags , mode_t mode);功能:
打开文件,如果不存在则创建
参数:
pathname: 文件的路径及文件名。
flags: 打开文件的行为标志,
mode: 新建文件时指定的文件的权限。
返回值:
成功,成功返回打开的文件描述符。
失败,-1
