一、学习的知识点
Linux 文件I/O
- C语言提供的标准库实现文件读写 fopen fclose fwrite
- linux 的系统调用 open close write
- 标准库函数是所有能够支持C语言的操作系统 提供的统一的读写文件的API函数,可以实现代码的移植
- Linux系统调用:Linux系统自己的内核提供了对文件读写的特殊函数。不具备通用性。
- 标准库性能更好,整个函数里面做了缓冲区
- Linux系统调用API:直接通过操作系统的软中断,调用Linux系统内核API来产生事件读写。
Windows和Linux对文件管理的差异
- Linux系统下:所有的设备,都把它看做是一个文件。所有的设备想要使用,都是调用open打开,对设备的读写都是read write
- Linux下面所有的设备都有编号:设备号 Linux的dev下面存放所有的设备文件
- linux系统API 帮助文档 man 系统调用(如open read write) 或者 man 2 系统调用
文件读写
open系统调用
/ | int open(const char *path, int flags); | int open(const char *path, int flags,mode_t mode); |
---|
参数 | path :文件的名称 可以包含(绝对和相对)路径 flags:文件打开模式 | path :文件的名称,可以包含(绝对和相对)路径 flags:文件打开模式 mode: 用来规定对该文件的所有者 |
返回值 | 打开成功,返回文件描述符;打开失败,返回-1 | 打开成功,返回文件描述符;打开失败,返回-1 |
int fd;
fd = open("/opt/test.txt",O_RDONLY);
if (fd < 0)
{
perror("open erroe:");
return -1;
}
write系统调用
/ | int write(int fd,void *buf,size_t nbytes); |
---|
参数 | fd :要写入的文件的文件描述符 buf: 指向内存块的指针,从这个内存块中读取数据写入到文件中 nbytes: 要写入文件的字节个数 |
返回值 | 写入成功,返回写入到文件中的字节个数;错误,返回-1 |
read系统调用
/ | int read(int fd, void *buf, size_t nbytes); |
---|
参数 | fd :想要读的文件的文件描述符 buf: 指向内存块的指针,从文件中读取来的字节放到这个内存块中 nbytes: 从该文件复制到buf中的字节个数 |
返回值 | 如果出现错误,返回-1 返回从该文件复制到规定的缓冲区中的字节数 文件结束,返回0 |
lseek系统调用
通过指定相对于开始位置、当前位置或末尾位置的字节数来重定位 curp,这取决于 lseek() 函数中指定的位置
原型 | off_t lseek (int fd, off_t offset, int base); |
---|
参数 | fd :需设置的文件标识符 offset :偏移量 base: 搜索的起始位置 |
返回值 | 返回新的文件偏移值 |
base | 文件位置 |
---|
SEEK_SET | 从文件开始处计算偏移 |
SEEK_CUR | 从当前文件的偏移值计算偏移 |
SEEK_END | 从文件的结束处计算偏移 |
创建目录
mkdir系统调用
用来创建一个称为pathname的新目录,它的权限位设置为mode
原型 | int mkdir(char *pathname,mode_t mode); |
---|
参数 | pathname:文件的路径名 mode:权限位 |
返回值 | 调用成功返回0,失败返回-1 |
二、上课没有听懂或者没有理解的地方
无
三、当天学习的收获
跨平台编程