1. 文件
狭义上的文件:磁盘上的文件。
广义上的文件:显示器,网卡,键盘...。
站在系统的角度,只要能够被输入读取,或者能被输入写出的设备都叫做文件。
Linux认为一切皆文件。访问文件,本质上是进程在访问文件。
2. 文件相关的C语言接口
2.1打开文件
fopen
FILE*fopen(const char*path,const char*mode)
FILE*fp=fopen("makefile,c","r");
path为文件名的路径 mode是访问文件的模式
模式 | 描述 | 文件是否存在 |
"r" | 打开文件读取 | 存在 |
"r+" | 打开文件读取并写入 | 存在 |
"w" | 创建文件并写入 | 已存在就先清空 |
"w+" | 创建文件读取并写入 | 已存在就先清空 |
"a" | 创建文件并附加写入 | 已存在不清空 |
"a+" | 打开文件读取附加写入 | 已存在不清空 |
2.2 创建文件的路径
当打开文件操作需要创建文件时,该文件会在当前路径中生成。
Linux当前路径:当进程运行起来的时候,每个进程都会记录自己当前所处的工作路径。
查看方法:拿到进程的pid后
ls/proc/14613-l
可以看到exe和cwd cwd即当前路径
2.3 清空文件
FILE*fp=fopen("makefile.c","w");
fclose(fp);
或者命名行中
>makefile.c
2.4 文件关闭
int fclose(FILE * stream)
fclose(fp);
2.5 文件写入
fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
const char*s1="hello fwrite";
fwrite(s1,strlen(s1),1,fp);
参数说明 :
const void *ptr : 指针指向要写出数据的内存首地址 ;
size_t size : 要写出数据的 基本单元 的字节大小 , 写出单位的大小 ;
size_t nmemb : 要写出数据的 基本单元 的个数 ;
FILE *stream : 打开的文件指针。
注:C语言中字符串以'\0'结尾,这里传入strlen(s1)却不用+1。因为文件不需要遵守C语言的规定,文件仅保存有效数据。
fprintf
int fprintf( FILE *stream, const char *format, ... ); const char*s2="hello fprintf"; fprintf(fp,"%s",s2);//s2以%s的形式输入fp char name[20] = "Mary"; fprintf( fp, "Hello %s\n", name );//Hello Mary
fputs
int fputs(const char *str, FILE *stream)
const char*s3="hello fputs";
fputs(s3,fp);