打开文件上限:ulimit 可以查看文件打开数目,同时 ulimit -n <数字> 可以修改文件打开数目。也就是说文件打开数目是有上限的,但是可以根据自己的使用情况来调整。
fread/fwrite/fopen/fclose 库函数
read/write/open/close 系统调用函数(Linux提供的比较底层的文件操作)
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:打开方式
flags分为:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读,写打开
注:这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限
O_APPEND: 追加写
返回值:
成功:新打开的文件描述符fd
失败:-1
#include<stdio.h> #include<unistd.h> #include<fcntl.h> int main(){ //open的返回值:文件描述符 //FILE*中包含了文件描述符 int fd = open("./test.txt", O_RDONLY) //只读打开 printf("%d\n", fd); return 0; int fd = open("./test.txt", 0_RDONLY | O_CREAT) //只读打开,文件存在就打开,文件不存在就自己创建 }
输出结果是:3
文件描述符表:
问:为什么是3?0,1,2去哪了?
答:0,1,2是标准输入,标准输出,标准错误,后序打开就接着打开。
read——文件描述符上执行读操作
函数:
ssize_t read(int fd, void *buf,size_t count)
size_t:表示有符号的长整形,不可为负数
ssize_t:表示可以为负数
char buf[1024]={0}; ssize_t n=read(fd,buf,sizeof(buf) - 1); //返回值读到多少个字节 //fd开始读,读到buf中去,空间是sizeof(buf) - 1
返回值:成功读了多少字节
write——写文件
char buf[1024]="hehe"; write(fd,buf,strlen(buf)); //buf写到fd中,要写的长度strlen(buf)
返回值是:成功写了多少个字节。