C文件I/O
在C语言中,默认会打开三个输入输出流,分别是stdin,stdout,stderr,不难发现,这三个流的类型都是FILE*,通过fopen得到的返回值为文件指针,指向打开的文件
#include <stdio.h>
#include <string.h>
int main(){
FILE* fp = fopen("myfile","w");
if(fp == NULL){
perror("fopen error\n");
}
const char* msg = "Hello fp\n";
int count = 5;
while(count--){
fwrite(msg,strlen(msg),1,fp);
}
fclose(fp);
return 0;
}
系统文件I/O
操作文件,当然不止有上述的C接口或者其他语言的一些接口,我们还可以通过系统所暴露的接口来进行文件访问,例如
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
int main(){
int fd = open("myfile",O_WRONLY|O_CREAT,0644);
if(fd < 0 ){
perror("open");
return 1;
}
int count = 5;
const char* msg = "hello fd\n";
int len = strlen(msg);
while (count--){
write(fd,msg,len);
}
close(fd);
return 0;
}
open函数:int open(const char* pathname , int flags);
int open(const char* pathname, int flags, mode_t mode);
pathname:要打开或创建的目标文件
flags: 打开文件时,可以传入多个参数选项,用一个或多个常量进行“或”运算,构成了flag
参数:
O_RDONLY:只读打开
O_WRONLY:只写打开
O_RDWR :读写打开
上面的三个变量必须指定一个且只能指定其中一个
扫描二维码关注公众号,回复:
1892408 查看本文章
O_CREAT :若文件不存在,则创建它。需要使用mode选项,来指明文件的访问权限
O_APPEND :追加写文件
返回值:
成功:返回的事新打开的文件描述符
失败:返回-1;
mode_t:设置权限
open函数具体使用哪一个和应用场景有关,如果目标文件不存在,需要open创建,则第三个参数表示创建函数的默认权限,否则,使用两个参数的open。
文件描述符fd
了解了open函数之后,又引出了一个新的概念,文件描述符