文件I/O操作有两种基本方式:
(1)系统调用I/O
低一级的I/O,在处理设备、管道、网络套接字特殊类型的文件时候必须用
(2)基于流的I/O
建立在系统调用的I/O方法上的C函数库,基于系统调用方法的封装并增加了额外的功能
基于流的I/O—— 打开、创建一个文件
FILE *fopen( const char *path,const char *mode) ;
模式 | 模式说明 |
“r” | 只读 |
“r+” | 读写‘ |
“w” | 只写 |
“w+” | 读写,存在则清空,不存在则创建,指针指向文件首地址 |
“a” | 追加只写,存在指针指向尾,不存在则创建 |
“a+” | 追加读写,存在指针指向尾,不存在则创建 |
基于流的I/O—— 关闭一个文件
FILE *fclose( FILE *p) ;
Eg:
#include <stdio.h>
int main(int argc, char **argv)
{ FILE *fp;
if(argc != 2)
{ printf("usage:fopen\n");
return -1;
}
基于流的I/O——关闭一个文件
Eg:
fp = fopen(argv[1], "w+");
if( fp == NULL )
perror("asdffd fopen error");
else
{ printf("fopen [%s] success\n", argv[1]);
if(fclose(fp) != 0 )
perror("fclose error");
else
printf("fclose [%s] success\n", argv[1]);
}
return 0;
}
基于流的I/O—— 按字符读文件
int fgetc(FILE *stream) ;
Eg:
#include <stdio.h>
int main(int argc, char **argv)
{ char c;
FILE *fp;
if(argc != 2)
{ printf("usage:fopen\n");
return -1; }
fp = fopen(argv[1], "r");
基于流的I/O—— 按字符写文件
int fputc(int c, FILE *stream) ;
Eg:
#include <stdio.h>
int main(int argc, char **argv)
{ char c;
FILE *fp_read, *fp_write;
if(argc != 3)
{ printf("usage:fopen\n");
return -1;
}
基于流的I/O—— 文件的随机存取
int fseek(FILE *stream, long offset,int whence ) ;
whence:
SEEK_SET // 从文件头开始计算
SEEK_CUR // 从文件当前位置开始计算
SEEK_END // 从文件结尾开始计算
long ftell(FILE *stream ) ;// 获取当前指针位置
void rewind(FILE *stream) // 指针指向文件的开始位置