Linux -- 标准IO库文件
1、标准IO库文件是系统调用文件IO进行开关读写操作的,如fopen()调用open()函数,相对移植方便和性能高效。
2、FILE指针,类似文件IO函数返回的文件描述符fd, FILE指针是一个结构体。
3、操作标准文件
①、调用包含头文件 #include <stdio.h>
②、打开文件:FILE* fopen(const char *path, const char *mode)
*path: 指向路径,可以绝对路径或相对路径
*mode : 对文件读写权限(r, r+, w, w+, a, a+)
③、关闭文件:int fclose(FILE *stream)
*stream: 文件指针,关闭成功返回0,失败返回EOF(也是-1),通过设置errno来指示错误原因
④、读出文件:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
*ptr:文件读出数据存放在ptr指向的缓存区;
size:数据项的大小
nmemb:读取数据项的个数
*stream:文件指针
⑤、写入文件:size_t fwrite(const void *ptr, szie_t size, size_t nmemb, FILE *stream)
*ptr:ptr指向的缓存区数据写入文件;
size:数据项的大小
nmemb:读取数据项的个数
*stream:文件指针
⑥、偏移定位:int fseek(FILE *stream, long offset, int whence);
*stream : 文件指针
*offset : 偏移量
*whence : 偏移起始位置(SEEK_SET,SEEK_CUR,SEEK_END)
fseek(fp, 0, SEEK_SET); //将文件的读写位置移动到文件开头处
fseek(fp, 0, SEEK_END); //将文件的读写位置移动到文件末尾
fseek(fp, 1024, SEEK_SET); //将文件的读写位置移动到 100 个字节偏移量处
⑦、获取偏移量:long ftell(FILE *stream)
示例:
#include <stdio.h>
#include <stlib.h>
int main(void){
char wr_buf[]="hello linux\n";
char rd_buf[128]={0};
FILE *fp = NULL;
int ret=0;
if(NULL == (fp=fopen("./test.txt","w+"))){
perror("fopen error");
exit(-1);
}
print("file open ok\n");
if(sizeof(wr_buf) > fwrite(wr_buf, 1, sizeof(wr_buf), fp)){
printf("file write error\n");
fclose(fp);
exit(-1);
}
printf("file write ok\n");
if(0 > fseek(fp, 0, SEEK_SET)){
perror("file seek error");
fclose(fp);
exit(-1);
}
if(sizeof(wr_buf) > (ret = fread(rd_buf, 1, sizeof(wr_buf), fp))){
printf("file read error\n");
fclose(fp);
exit(-1);
}
printf("read file %d data:%s\n", ret, rd_buf);
fclose(fp);
exit(0);
}


浙公网安备 33010602011771号