Linux---I/O标准文件的一些操作

时间:2022-08-28 01:50:39

(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