欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Linux基础IO

Linux基础IO

2025/7/29 5:28:10 来源:https://blog.csdn.net/2302_80378107/article/details/144585086  浏览:    关键词:Linux基础IO

1.狭义文件理解

文件在磁盘

磁盘是永久性存储介质,因此文件在磁盘上的存储是永久性的

磁盘是外设(既是输出设备也是输入设备)

磁盘上的文件本质是对文件的所有操作,都是对外设的输入和输出,简称IO

2.广义理解

Linux下一切皆文件(键盘,显示器,网卡,磁盘等)

3.文件操作的归类认知

对于0kb的空文件是占用磁盘空间

文件是文件属性和文件内容的集合(文件=属性+内容)

所有的文件操作本质是文件内容操作和文件属性操作

系统角度

对文件操作的本质是进程对文件的操作

磁盘的管理者是操作系统

文件的读写本质不是通过C/C++库函数操作的,而是文件相关的系统调用接口实现。

4.代码实现

写文件

用fopen打开文件,模式以w形式,如果输入的文件不存在会创造一个出来,用snprintf函数把msg的内容打印到buffer里面,然后用fwrite把buffer的内容写到fp指向的文件里,这样log.txt里面就有内容显示了。

fwrite的数据项和数据项的数量俩个参数是无所谓的,因为都是一个一个字节的写入。

  1 #include<stdio.h>2 #include<string.h>3 4 5 int main()6 {7 8         FILE* fp=fopen("log.txt","w");9         if(fp==NULL)10         {11                 perror("fopen fail:");12                 return 1;13         }14         const char* msg="hello";15         int cnt=1;16         while(cnt<=10)17         {18                 char buffer[1024];19                 snprintf(buffer,sizeof(buffer),"%s%d\n",msg,cnt++);20                 fwrite(buffer,strlen(buffer),1,fp);21         }22         fclose(fp);23 24 25 26         return 0;27 }
~             

读文件

把前面写入的log拿来读,用fread函数来读入到buf里面,然后打印buf就可以看到log.txt的内容了,

fread要看读的是什么,对于字符数组,字符的长度是一个字节,然后有strlen(msg)个这样大小的元素。

  1 #include<stdio.h>2 #include<string.h>3 4 5 int main()6 {7         FILE* fp=fopen("log.txt","r");8         if(!fp)9         {10                 perror("fopen fail:");11                 return 1;12 13 14         }15         char buf[1024];16         const char* msg="hello";17         size_t a=0;18         while(1)19         {20                 size_t s=fread(buf,1,strlen(msg),fp);21                 if(s>0)22                 {23                         buf[s]=0;24                         printf("%s",buf);25                         //printf("%\d",s);26                 }27                 if(feof(fp))28                         break;29                 a=s;30         }31         printf("%d\n",a);32         fclose(fp);33 34         return 0;35 }

实现cat命令

父进程会给main的argv参数,再用给的命令行参数可以打开文件,argv[1]第二个元素就是文件名字,然后创建一个数组去把指定文件的内容读到创建的里面,然后打印创建的数组就可以看到对于文件的内容了。

  1 #include<stdio.h>2 #include<string.h>3 4 5 int main(int argc,char* argv[])6 {7         if(argc!=2)8         {9                 printf("Usage:%s filename\n",argv[0]);10                 return 1;11 12         }13         FILE* fp=fopen(argv[1],"r");14         if(fp==NULL)15         {16                 perror("fopen");17                 return 2;18 19         }20         while(1)21         {22                 char buffer[128];23                 memset(buffer,0,sizeof(buffer));24                 int n=fread(buffer,1,sizeof(buffer)-1,fp);25                 if(n>0)26                         printf("%s",buffer);27                 if(feof(fp))28                         break;29 30 31 32         }33 34         fclose(fp);35         return 0;36 }

输出信息到显示器

  1 #include<stdio.h>2 #include<string.h>3 4 int main()5 {6         const char* msg="hello\n";7         fwrite(msg,strlen(msg),1,stdout);8         printf("hello\n");9         fprintf(stdout,"hello\n");10         return 0;11 12 13 14 }
~        

stdin&stdout&stderr

C默认会打开这三个输入输出流,分别是stdin,stdout,stderr

这三个流的类型都是FILE*,fopen返回值类型,文件指针

# include <stdio.h>
extern FILE * stdin ;
extern FILE * stdout ;
extern FILE * stderr ;

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词