(1)文件的概念
linux中文件分为: 普通文件 -、目录 d、字符设备 c、块设备 b、有名管道 p、套接口 s、符号链接 l ; 标准IO和文件IO这部分主要对普通文件操作; 普通文件分为二进制文件和ascii文件。
(2)标准I/O库
标准IO是一个标准库,在建立系统调用基础之上的,对用户提供统一的编程接口,标准IO库在很多系统上实现了,本质上是在不同系统上调用各自系统的系统调用,而对用户的接口不变,这样,用户层编写的代码就可以移植到不同系统,而不做修改,而且用户不需要关心库内部实现。
(3)标准IO的流和对象
FILE 结构体保存打开文件信息,通过这个结构体操作文件,可以把这个结构体理解为流,在流中操作的数据分为文本流和二进制流文本流:主要为可见字符以及\n等二进制流:处理的是二进制序列。
(4)几个文件操作的函数
Fopen:
重点 :打开方式 r w a + b
+ 读写
b 二进制方式打开
r 文件必须存在,否则打开时报错
w 打开文件时,如文件存在清除数据,不存在创建
Fclose:注意 在调用后不能在进行流操作
fread :第一个参数为buf,保存读到的数据
第二个参数元素大小
第三个参数元素个数
注意 : 元素个数 * 元素大小 不能超过buf大小
Fwrite:第一个参数为buf,写文件的内容保存在buf中
第二个参数元素大小
第三个参数元素个数
注意 : 元素个数 * 元素大小 不能超过buf大小
feof :用于判断是否到文件末尾 0 未到文件尾标志未设置, 非0 文件尾标志被设置
Ferror:判断是否对流操作出错,注意是流读写操作, 0 出错标志未设置 ,非0 出错标志设置
自编cat命令函数:
1 #include <stdio.h> 2 #include <errno.h> 3 #include <string.h> 4 #define BUF_SIZE 12 5 6 int main(int argc,char *argv[]) 7 { 8 FILE *pFile=fopen(argv[1],"r"); 9 if (NULL==pFile) 10 { 11 printf("fopen errori %d %s\r\n",errno,strerror(errno)); 12 return -1; 13 } 14 //read file 15 char buf[BUF_SIZE]={0}; 16 memset(buf,0,BUF_SIZE); 17 while(!feof(pFile)) 18 { 19 memset(buf,0,BUF_SIZE); 20 size_t tRet=fread(buf,1,10,pFile); 21 if(0==tRet||ferror(pFile)) 22 { 23 break; 24 } 25 printf("%s",buf); 26 } 27 fclose(pFile); 28 pFile=NULL; 29 return 0; 30 }
自编复制函数:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define BUF_SIZE 10 5 int main(int argc,char *argv[]) 6 { 7 8 FILE *pSrc=fopen(argv[1],"r"); 9 if(NULL==pSrc) 10 { 11 return -1; 12 } 13 FILE *pDest=fopen(argv[2],"w"); 14 if(NULL==pDest) 15 { 16 fclose(pSrc); 17 return -1; 18 } 19 20 21 char buf[BUF_SIZE]={0}; 22 while(!feof(pSrc)) 23 { 24 memset(buf ,0,BUF_SIZE); 25 int iRed=fread(buf,1,10,pSrc); 26 27 if(0!=iRed) 28 { 29 fwrite(buf,1,iRed,pDest); 30 } 31 } 32 33 34 fclose(pSrc); 35 fclose(pDest); 36 pSrc=NULL; 37 pDest=NULL; 38 return 0; 39 } 40