(Linux文件)文件操作和几种应用

文件操作原理简述

1.Linux系统中默认有3个文件描述符:
0标准输入; 1标准输出; 2标准错误
2.从文件描述符为0的地方(标准输入)读,读到readbuf里去,输出到1(标准输出)里,输出写进来的东西
在这里插入图片描述
在这里插入图片描述
标准错误可用用来当作垃圾桶 往里扔东西(没讲怎么用)
3.文件描述符的作用域就是当前进程,出了这个进程文件描述符就没意义了
4.文件读写完成后要关闭文件,否则容易造成文件损坏
5.文件分为静态文件和动态文件,静态文件:在磁盘中保存的文件。动态文件:open静态文件后,在linux内核会产生一个结构体,read,write都是对这块内存进行操作,调用close后会把这个缓存区的数据写到磁盘去

文件操作小应用之实现cp指令

(cp指令是怎么实现的,如果让你自己写一个cp指令,就如mycp)
1.实现linux cp命令的代码(面试)
cp src.c des.c
思路:打开src.c,读src.c到buf,创建des.c,将buf写到des.c,close两个文件
2.代码实现:
先做一个测试函数,agrc是参数的个数,**argv是字符数组,其中的argv[0]指向cp,argv[1]指向src.c的地址 argv[2]指向des.c的地址
在这里插入图片描述
只运行不给参数:
在这里插入图片描述
给出三个完整的参数指令
在这里插入图片描述
完整代码:
在这里插入图片描述
代码分析:两个文件描述符,分别是fdSrc源文件文件描述符,fdDes目标文件描述符。
1.首先判断用户给的参数个数是否是3个,若参数个数不对,则直接退出程序。
2.满足条件后,以可读可写的方式打开argv[1]指向的源文件Src.c,并获取源文件的文件描述符。
3.打开以后,读取文件描述符为fdSrc的源文件,将读取到的size大小的内容存放到读取缓冲器readBuf中,其中size大小可采用lseek的返回值来获取,readBuf存储空间的大小也由size的大小来决定。(注意:在打开以后光标移动到了文件末尾,再次读取时会从末尾开始造成读取为空,因此用lseek函数及时将光标移到文件头开始的地方)
4.读取源文件中的内容以后,打开目标文件,其中argv[2]指向文件描述符为fdDes的目标文件,若目标文件不存在则执行O_CREAT创建目标文件,若目标文件中在之前已有内容存放,则执行O_TRUNC去打开文件,(清空重写)
5.打开或创建目标文件以后,将从源文件读取并缓存到读取缓冲器readBuf中的内容写入到目标文件中。
6.关闭源文件和目标文件。
在这里插入图片描述
在gcc编译时将生成的执行文件命名为mycp
在这里插入图片描述
在执行时,共有三个参数,argv[0]为./mycp参数指令,argv[1]指向源文件demo2.c,即被复制的文件,argv[2]指向目标文件new.c,即被粘贴内容的文件。在运行后便可看到新生成的new.c文件,该文件内容是复制demo2.c的内容,这样mycp复制指令就完成了。

文件编程小应用之修改程序的配置文件

思路:先找,用strstr来找被改的位置。然后指针移动p=p+strlen(“leng=”);这么多的位置。然后改要改成的值:*p=’5’;。最后再写回
首先定义一个test.config这个文件,文件里的内容:
在这里插入图片描述
目标:把LENG=3改成LENG=5
在这里插入图片描述
编译时把被改的文件名写上。在这里插入图片描述
补充:用O_TRUNC的方法:(没截图部分同上方代码部分)
在这里插入图片描述

写一个整数到文件

在这里插入图片描述
结果: read:100 a
同理也可以写一个结构体数组进去,以后可能会写链表。代码部分:
在这里插入图片描述
×2那里要注意读写的数据的大小,如果是链表,要用sizeof来计算链表的大小。
结果:在这里插入图片描述
最终打开file1文件时会乱码,但是不影响计算机的识别,只是人眼看不懂。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值