cp指令以及其他函数

cp指令:

src 源文件 des 目标文件

执行流程:

  •          打开源文件(src)open
  •         打开目标文件(des) open
  •          写入目标文件 write
  •          读取src文件到缓存数组 read
  •          关闭目标文件和源文件 close
    • ./a.out src.c des.c

操作流程:

按步骤编写程序,

准备要复制的文件:

cp demo1 demo2 demo4

demo2 的内容复制到demo4中,如果没有demo4 则创建。

vimfiff:是 Vim 编辑器的一个非常有用的功能,它允许你并排查看两个或三个文件,并高亮显示它们之间的差异。这对于比较文件、合并更改或审查代码特别有用。

补充:

学习中用到的C语言标准库中的函数:

memset: 用于填充内存块,在定义的string.h头文件中,可以用于将指定的内存区域的每个字节都设定为特定的值。函数经常用于初始化或者清零内存区域,或者设置为某一特定的值。

原型:

void *memset(void*s,int c ,size_t n);

  • s:指向要填充的内存区域的指针。
  • c:要填充的值。这个值会被转换为一个无符号字符(通常是 8 位),然后用来填充内存。
  • n:要填充的字节数。

touch:一个命令行工具,用于创建新的文件,更新现有文件的访问,和修改时间戳

更完善的程序书写以及熟悉cp指令:

vi dec.c 进入文件查看,文件内容相同,证明操作成功,。

fopen函数以及fclose函数:

fopen , fread , fwrite , fclose   函数都属于标准c库。

include standard io lib

open,close ,write, read属于Linux的系统调用。

可移植性来讲,fopen强于open函数。

注意的是:fopen在用户态是缓存的,而open在用户态是没有缓存的

与open函数不同的是:打开一个文件,返回的是该文件的指针。

函数原型:

FILE * fopen(constchar *path , cost char *mode)

/*

* @description : 打开一个文件

* @param ‐ path : 指定文件路径,如:"./test.txt"

* @param ‐ mode :指定文件的打开方式,如下图:

* @return : 成功,返回指向该文件的文件指针; 若失败,返回 NULL */

参数说明:第一个参数为要打开的文件的文件路径以及文件名,第二个参数表示打开文件的方式。

mode:

  • r:只读方式打开,文件必须存在
  • r+:可读写,文件必须存在
  • rb+:打开二进制文件,可以读写
  • rt+:打开文本文件,可读写
  • w:只写,文件存在则文件长度清0,文件不存在则建立该文件
  • w+:可读写,文件存在则文件长度清0,文件不存在则建立该文件
  • a:附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾,EOF符保留
  • a+:附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不保留 wb:打开二进制文件,只写
  • wb+:打开或建立二进制文件,可读写
  • wt+:打开或建立文本文件,可读写
  • at+:打开文本文件,可读写,写的数据加在文本末尾
  • ab+:打开二进制文件,可读写,写的数据加在文件末尾

返回值:

        文件打开则返回指向打开该文件的指针(FILE结构),文件打开失败错误上存errorcode(错误代码)。

fclose文件:

关闭一个文件流。使用fclose可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓存区。

函数原型:int fclose(FILE*stream)

/*

* @description :关闭一个已打开的流

* @param ‐ stream :文件指针(流)

* @return : 成功,返回0; 若失败,返回EOF

*/

简单的程序书写举例:

ls -l 查看相关文件权限:

fread函数、fwrite函数和fseek函数:

fread函数:

从文件中读取数据到指定的地址中。

函数原型:

size_t fread(void*buff , size_t size, size_t count , FILE* stream)

/*

* @description :对已打开的流进行数据读取

* @param ‐ ptr :指向 数据块的指针

* @param ‐ size :指定读取的每个数据项的字节数

* @param ‐ nmemb : 指定要读取的数据项的个数

* @param ‐ stream :要读取的文件流

* @return : 返回实际读取数据项的个数;

*/

  • 参数: 第一个参数为接收数据的指针(buff),也即数据存储的地址
  • 第二个参数为单个元素的大小,即由指针写入地址的数据大小,注意单位是字节
  • 第三个参数为元素个数,即要读取的数据大小为size的元素个素
  • 第四个参数为提供数据的文件指针,该指针指向文件内部数据
  • 返回值:读取的总数据元素个数

简单程序书写记忆:

mm书写内容:

编译:

执行:

fwrite函数:

函数原型:int fwrite(void*buffer,intsize,intcount,FILE*fp)

/*

* @description :对已打开的流进行写入数据块

* @param ‐ ptr :指向 数据块的指针

* @param ‐ size :指定写入的每个数据项的字节数,如调用sizeof(char)

* @param ‐ nmemb :指定写入的数据项的个数

*@param ‐ stream :要写入的文件流

* @return : 返回实际写入的数据项的个数

*/

说明:

  •   fread()──从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放 到从buffer开始的内存中; buffer是存放读入数据的起始地址(即存放何处)。
  •  fwrite()──从buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件 中。buffer是要输出数据在 内存中的起始地址(即从何处开始输出)。
  •   一般用于二进制文件的处理。

简单程序书写记忆:

fseek函数:

重定位文件内部的指针;

函数原型:int fseek(FILE *stream,long offset,int framewhere)

  • 参数:第一个为文件指针,第二个是指针的偏移量,第三个是指针偏移起始位置
  • 返回值:重定位成功返回0,否则返回非零值

需要注意的是该函数不是重定位文件指针,而是重定位文件内部的指针,让指向文件内部数据的指针移到文件中我 们感兴趣的数据上,重定位主要是这个目的。

说明:执行成功,则stream指向以fromwhere为基准,偏移offset个字节的位置。执行失败(比方说offset偏移的位 置超出了文件大小),则保留原来stream的位置不变

分别用3个宏

  • SEEK_SET 既0 文件开头
  • SEEK_CUR 既1 文件当前位置
  • SEEK_END 既2 文件结尾

但不推荐用数字 最好用宏 简言之:

1. fseek(fp,100L,SEEK_SET);把fp指针移动到离文件开头100字节处;

2. fseek(fp,100L,SEEK_CUR);把fp指针移动到离文件当前位置100字节处;

3. fseek(fp,100L,SEEK_END);把fp指针退回到离文件结尾100字节处。

这里的五种函数都是以C语言的#include<stdio.h>为头文件。

熟练的使用以上四种函数可以从文件中获取对我们有用的数据型。前提是对文件格式很了解,比如一个DIB位图文件。就可以读取出他的文件中的头信息和像素点信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值