1.实现linux系统的cp命令

复制文件,首先我们要打开这个文件,把里面的内容复制下来,再开打另一个文件,把复制内容放进去。这样就实现了一个文件的复制。总结下来就四步:

(1)打开要原文件。

(2)读取要复制的内容。

(3)打开要复制的文件。

(4)写入复制的内容关闭文件。

代码实现如下:

int main(int argc,char **argv)

{
        int fdsrc;//原文件
        int fddes;//要复制文件
        char *readbuf=NULL;//定义要读取的内容字符串
        if(argc != 3)//如果参数不是三个则复制失败,退出。
        {
                printf("pararm error\n");
                exit(-1);
        }

fdsrc = open(argv[1],O_RDWR);//打开原文件
        int n_lseek = lseek(fdsrc,0,SEEK_END);//实现光标函数测量文件大小。
        lseek(fdsrc,0,SEEK_SET);//测量后要复位回到文件开始位置。
        readbuf = (char *)malloc(sizeof(char)*n_lseek +8);//这里是读取内容空间大小,后面+8预留位置防止bug;
        int n_read = read(fdsrc,readbuf,n_lseek); //读取了文件内容,返回读取多少字节

fddes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);//打开要复制的文件,如果这里不使用O_TRUNC则会在文件内容后面复制。
        int n_write = write(fddes,readbuf,strlen(readbuf));//把读取的内容写入进去。

close(fdsrc);
        close(fddes);
        return 0;
}

关于main(int argc,char **arhv):

argc:用来统计命令行参数的个数,要算上./a.out;

argv:

argv[0]:指向文件运行的全路径名,就是执行程序路径。

argv[1]:指向命令行中执行程序名后的第一个字符串。

argv[3]:执行程序后面第二个参数。

例如:

int main(int argc,char **argv)
{
        printf("totol params:%d\n",argc);
        printf("NO.1 params:%s\n",argv[0]);
        printf("NO.1 params:%s\n",argv[1]);
        printf("NO.1 params:%s\n",argv[2]);

return 0;

}

运行结果:

2.使用文件操作修改配置文件。

修改配置文件,我们打开一个配置文件,读取文件,找到想要修改的地方,修改它。我们把文件读入一个字符数组中,利用strstr()函数查找想要修改的段。例如我们在字符数组中查找想要的字符串“ZFYHS=”,而我们想修等于后面的字,这时字符数组中有这个子片段就会返回Z那个地方的指针,我们在计算一下想要修改的位置的偏移大小,加上这偏移大小,到达位置后修改,再次写入就完成了修改配置文件。总结为:

1.打开配置文件,读取文件内容。

2.找到想要修改字符串的位置,计算偏移量。

3.找对位置修改后,再次写入文件,完成修改。

代码如下:

int main(int argc,char **argv)
{
        int fdsrc;

char *readbuf=NULL;//定义读取内容数组

fdsrc = open(argv[1],O_RDWR);//打开文件
        int n_lseek = lseek(fdsrc,0,SEEK_END);//光标测量大小
        lseek(fdsrc,0,SEEK_SET);//光标归位。
        readbuf = (char *)malloc(sizeof(char)*n_lseek +8);//分配空间
        int n_read = read(fdsrc,readbuf,n_lseek);//读取文件
        char *p = strstr(readbuf,"LENG=");//找修改位置
        if(p == NULL){//如果没有,退出。
                printf("not found");
        }
        p = p+strlen("LENG=");//计算偏移量并找到修改位置
        *p = '9';
        lseek(fdsrc,0,SEEK_SET);光标归位,因为读取时使光标移动
        int n_write = write(fdsrc,readbuf,strlen(readbuf));写入文件;

close(fdsrc);

return 0;

}

3.想文件写入一个整数和结构体。

同样是打开文件,写入想要的内容,关闭文件就ok了;

代码如下:从2中代码注释

int main()
{
        int fd;
        int a = 100;
        int b = 0;

fd = open("./file1",O_RDWR);

int n_write = write(fd,&a,sizeof(a));//write函数中buf这个第二个参数是无类型指针,这里是整形指针,read同理;
        lseek(fd,0,SEEK_SET);

//看一下写入的是否正确,打印验证一下。
        int n_read = read(fd,&b,sizeof(b));
        printf("read:%d",b);
        close(fd);
        return 0;
}

写入结构体同理,定义一个结构体,把整形数据换成结构体就可以了。

linux文件操作练习相关推荐

  1. linux 设计一个程序,要求打开文件 pass 所有者,第二章 Linux 文件操作

    文档均来自网络,如有侵权请联系我删除文档 第二章 Linux 文件操作(4学时) 实验一文件属性和无缓冲I/O 实验目的 1.熟悉Linux文件系统属性控制 2.掌握不带缓存的文件I/O程序设计方法 ...

  2. Linux ● 文件操作指令

    [Linux基础与Shell基础]系列文章目录 第一章 初识 Linux Linux是什么? Linux的使用原理 第二章 Linux的基本使用 ● 不同类型的常用指令 Linux ● 文件操作指令 ...

  3. Linux 高并发学习笔记 - Linux 文件操作函数

    1.6.2 Linux 文件操作函数 Linux 高并发学习笔记 - 笔记索引 前言 关于文件操作函数这一块主要用英文文档的形势书写,因为凉皮在写文档的时候发现Markdown用起来太繁琐了.那么关于 ...

  4. Linux文件操作--Python模块

    蓝桥云课笔记 一.认识Linux 1.快捷操作 2.查看目录结构:tree 3.绝对路径 4.新建目录 二.Linux文件操作 1.**新建空白文件** 2.**复制** 3.**删除** 4.**移 ...

  5. linux文件操作函数程序,linux 文件操作函数

    文件操作(Linux) 常用linux函数库中的基本函数 1. close函数,关闭文件 2. creat函数,建立文件 3. dup.dup2函数,复制文件描述词 4. fcntl函数,文件描述词操 ...

  6. linux 文件操作函数,Linux下的文件操作函数及creat用法

    编写Linux应用程序要用到如下工具: (1)编译器:GCC GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]. ...

  7. linux 文件操作 编程,Linux系统编程------------文件操作(基础)

    一.文件操作 1.1 Linux文件系统结构 1.1.1  Linux常见系统目录 /bin  :  存放普通系统可执行的命令(ls wc等) /sbin  :  存放系统管理程序(fsck等) /b ...

  8. [搬家帖]Linux文件操作

    一.文件系统 文件系统的作用就是将文件组织成包含目录.连接等存在于物理块设备中的逻辑层次结构.它不关心底层的物理块设备的结构,当对文件进行操作时,由块设备驱动程序将对某个特定块的请求映射到正确的设备上 ...

  9. 【文件IO】Linux 文件操作(一) —— 遍历指定目录下的所有文件

    目录 一.访问目录相关函数 1.打开/访问目录 (opendir / fdopendir) 2.读取目录内容 (readdir) 3.关闭目录 (closedir) 二.遍历指定目录下的所有文件 一. ...

  10. linux文件操作管理,linux 文件管理操作入门

    mkdir -p /root/kali/bp/shell  一路创建文件夹直到生成文件夹shell,中间没有kali文件夹的话也会自动创建生成 tar解压缩 范例一:将整个 /etc 目录下的文件全部 ...

最新文章

  1. oracle最小精度,【整理+原创】Oracle的计算精度与误差
  2. CAD输出的局部平面坐标数据配准转换到WGS84坐标系
  3. 火星浏览器_Facebook Libra 测试网区块浏览器上线,测试网已被重置2次
  4. 直接在安装了redis的Linux机器上操作redis数据存储类型--hash类型
  5. Dynamic CRM 2013学习笔记(二十二)插件里调用WCF服务
  6. ntp时间同步软件_NTP服务器的搭建和时间同步
  7. marqueeview更改字体颜色_安卓手机上可以编辑字体的便签软件哪个好?
  8. TSO、UFO、GSO、LRO、GRO和RSS介绍
  9. C# 解析CSV文件
  10. 智能语音交互之简单实例
  11. Guava的两种本地缓存策略
  12. 怎样用计算机xp命令修复软件,系统之家xp系统修复控制台命令使用方法
  13. EXCEL转PDF最便捷的方法
  14. Python大小写转换
  15. 联想T430i笔记本电脑无声音
  16. win10创意者更新是什么 Win10创意者更新升级方法
  17. js函数求两个数的和
  18. Android NDK 编译PjSip 2.6 之 搭建PjSip apk开发环境 (三)
  19. [局域网共享批处理文件]局域网共享时看不到工作组计算机的
  20. 从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界解决方案

热门文章

  1. 施乐202打印监视器_在“提示”框中:打印和玩游戏,DIY管道监视器支架和Android计时器...
  2. Typora安装包下载
  3. 数据库期末考试简答题背诵
  4. tarjan算法(强连通分量与割点)
  5. Java. Static 修饰类_static 表示静态,它可以修饰属性,方法和代码块。
  6. MQTT发布订阅和取消订阅
  7. 关于标书文件的书写(一)
  8. 来内蒙古之星选购腾势X——践行自己的生活态度
  9. 取消恶意绑定http://www.2345.com/?d3方面方法
  10. 多核时代:并行程序设计探讨(2)——并行实现技术