linux文件编程(3)—— main函数传参、myCp(配置成环境变量)、修改配置文件、将整数和结构体数组写到文件

参考:linux文件编程(3)—— 文件编程的简单应用:myCp、修改配置文件
作者:丶PURSUING
发布时间: 2021-04-09 23:45:05
网址:https://blog.csdn.net/weixin_44742824/article/details/115209404
部分参考:https://leo-max.blog.csdn.net/article/details/112966334

目录

  • 实现cp指令
    • 掌握向main函数传参
    • cp指令实现思路
    • 实现代码
    • myCp指令全局可用
  • 修改配置文件
  • 将整数写到文件
  • 将结构体数组写到文件

实现cp指令

掌握向main函数传参

int main(int argc,char** argv )/** 参数 
argc:   参数个数
**argv:二级指针,数组的指针(argv[0]、argv[1]、argv[2]...),即这个指针里的每一项都是一个数组(字符串)
**/

最直观的还是例子

#include <stdio.h>int main(int argc,char** argv)
{printf("参数个数:%d\n",argc);printf("argv[0]:%s\n",argv[0]);printf("argv[1]:%s\n",argv[1]);printf("argv[2]:%s\n",argv[2]);return 0;
}

运行结果:
在这里插入图片描述

cp指令实现思路

(1)打开src源文件(要被复制的文件)
(2)把源文件的内容读入buf
(3)创建目标文件
(4)把buf内容写入目标文件
(5)关闭源文件与目标文件

实现代码

(1)精简不带调试版

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main(int argc,char** argv)
{//(1)打开src源文件(要被复制的文件)int fdSrc = open(argv[1],O_RDWR);int sizeOfSrc = lseek(fdSrc,0,SEEK_END);lseek(fdSrc,0,SEEK_SET);//(2)把源文件的内容读入bufchar* readBuf = (char* )malloc(sizeOfSrc);memset(readBuf,'\0',sizeOfSrc);int retRead = read(fdSrc,readBuf,sizeOfSrc);//(3)创建目标文件,如果已经存在则覆盖  //O_TRUN原文件度先截为0int fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);//(4)把buf内容写入目标文件int retWrite = write(fdDes,readBuf,sizeOfSrc);//(5)关闭源文件与目标文件close(fdSrc);close(fdDes);return 0;
}

(2)打印调试信息对open,read,write的状态进行跟踪版

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main(int argc,char** argv)
{if(argc != 3){printf("参数个数错误\n");exit(-1);}//(1)打开src源文件(要被复制的文件)int fdSrc = open(argv[1],O_RDWR);if(fdSrc < 0){printf("open src error\n");}int sizeOfSrc = lseek(fdSrc,0,SEEK_END);lseek(fdSrc,0,SEEK_SET);char* readBuf = (char* )malloc(sizeOfSrc);memset(readBuf,'\0',sizeOfSrc);//(2)把源文件的内容读入bufint retRead = read(fdSrc,readBuf,sizeOfSrc);if(retRead < 0){printf("read error\n");exit(-1);}//(3)创建目标文件,如果已经存在则覆盖  //O_TRUN原文件长度截为0int fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);if(fdDes < 0){printf("open Des error\n");exit(-1);}//(4)把buf内容写入目标文件int retWrite = write(fdDes,readBuf,sizeOfSrc);if(retWrite < 0){printf("write error\n");exit(-1);}//(5)关闭源文件与目标文件close(fdSrc);close(fdDes);return 0;
}

运行结果:生成了和mainPro.c 一样的new.c
在这里插入图片描述

myCp指令全局可用

(1)查看当前所配置的环境变量

echo $PATH

发现并没有myCp可执行文件的路径,所以要手动添加进去。
在这里插入图片描述

在此之前,还可以创建一个文件夹,专门用来存放我们自己写的命令,如myCp,myLs等等,方便全局使用,而不仅仅限于所在路径下使用了。使用方法直接myCp XX XX(不必再使用./myCp XX XX这种方法了)

(2)创建文件夹,把myCp放进去

mkdir MYPATH

(3)pwd查看当前路径为:

/home/zhua/wenJian/MYPATH
  • 1

(4)添加路径:

export PATH=$PATH:/home/zhua/wenJian/MYPATH

其中$PATH也可替换成上面图片所显示的环境变量,即:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:

(5)再次查看配置的环境变量:配置成功(在最后尾巴上,此时只要在这个文件夹下的可执行命令都可以在全局运行)

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/zhua/wenJian/MYPATH

修改配置文件

现有某配置文件如config,要求利用文件编程把length的值修改为9.

文件运行参数:
score=90
length=5
high=10

简单示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main()
{//(1)打开配置文件int fdConfig = open("./config",O_RDWR);//(2)计算配置文件大小int sizeOfConfig = lseek(fdConfig,0,SEEK_END);lseek(fdConfig,0,SEEK_SET);char* readBuf = (char* )malloc(sizeOfConfig);memset(readBuf,'\0',sizeOfConfig);//(3)读取文件内容到readBufread(fdConfig,readBuf,sizeOfConfig);//(4)找到并修改length=后面的内容char* p = strstr(readBuf,"length=");p = p + strlen("length=");*p = '9';//(5)重新将内容写回去lseek(fdConfig,0,SEEK_SET);write(fdConfig,readBuf,sizeOfConfig);//(6)关闭文件close(fdConfig);return 0;
}

运行结果:

文件运行参数:
score=90
length=9
high=10

将整数写到文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>int main()
{int fd;int data = 100;int data2 = 0;fd = open("./file1",O_RDWR);int n_write = write(fd,&data,sizeof(int));	//加上&lseek(fd,0,SEEK_SET);int n_read = read(fd,&data2,sizeof(int));	//加上&printf("read %d \n",data2);close(fd);return 0;
}

运行结果:
在这里插入图片描述
打开文件file1,发现像是乱码,不用担心,这只是字符显示形式,不影响程序的执行结果。
在这里插入图片描述

将结构体数组写到文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>struct Test
{int a;char c;
};int main()
{int fd;struct Test data[2] = {{100,'a'},{101,'b'}};struct Test data2[2];fd = open("./file1",O_RDWR);int n_write = write(fd,&data,sizeof(struct Test)*2);lseek(fd,0,SEEK_SET);int n_read = read(fd,&data2,sizeof(struct Test)*2);printf("read %d %c\n",data2[0].a,data2[0].c);printf("read %d %c\n",data2[1].a,data2[1].c);close(fd);return 0;
}

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 修改文件名_Linux常用命令

Linux下一切皆文件查看型ls 查看当前文件夹内容 选项 -a 查看隐藏文件 -l 查看文件详细信息pwd 查看当前所在路径su 切换用户cat /etc/passwd 查看当前系统的用户cat 文件 查看文件内容选项 -n 加上编号 -E 每行末尾加上$ifconfig 查看网卡名&#xff0c;IP地址等网络信息route…

c语言mfc弹出窗口函数,CMFCDesktopAlertWnd实现桌面弹出消息框

1.创建一个CMFCDesktopAlertWnd指针CMFCDesktopAlertWnd* pPopup new CMFCDesktopAlertWnd;2.设置参数pPopup->SetAnimationType((CMFCPopupMenu::ANIMATION_TYPE) 2);pPopup->SetAnimationSpeed(100);pPopup->SetTransparency((BYTE)128);pPopup->SetSmallCaptio…

linux文件编程(2)——系统文件描述符、动静态文件、块设备介绍

参考&#xff1a;linux文件编程&#xff08;2&#xff09;——文件操作原理简述之文件描述符、动静态文件、块设备 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-09 11:14:12 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115209312 目…

java中volatile的使用方式

2019独角兽企业重金招聘Python工程师标准>>> 转载地址&#xff1a; http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 转载于:https://my.oschina.net/wangfree/blog/122664

linux文件编程(1)—— open、write、read、lseek、阻塞问题(ps文件操作/文件描述符/重定向原理/缓冲区/标准错误)

参考&#xff1a;linux文件编程&#xff08;1&#xff09;—— 常用API之open、write、read、lseek 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-08 22:19:28 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115209134 【Linux】文件操…

linux文件编程(4)—— 用ANSIC标准C库函数进行文件编程:fopen、fread、fwrite、fseek

参考&#xff1a;linux文件编程&#xff08;5&#xff09;—— 用ANSIC标准中的C库函数进行文件编程 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-11 11:58:25 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115209680 部分参照&#…

swig封装 c语言函数到python库,python swig 调用C/C++接口

转载&#xff1a;https://www.cnblogs.com/dda9/p/8612068.html当你觉得python慢的时候&#xff0c;当你的c/c代码难以用在python上的时候&#xff0c;你可能会注意这篇文章。swig是一个可以把c/c代码封装为python库的工具。(本文封装为python3的库)文章结构整体看封装只使用py…

Java学习---面试基础知识点总结

Java中sleep和wait的区别① 这两个方法来自不同的类分别是&#xff0c;sleep来自Thread类&#xff0c;和wait来自Object类。sleep是Thread的静态类方法&#xff0c;谁调用的谁去睡觉&#xff0c;即使在a线程里调用b的sleep方法&#xff0c;实际上还是a去睡觉&#xff0c;要让b线…

使用NPOI和委托做EXCEL导出

首先&#xff0c;在用NPOI导出时&#xff0c;学习了邀月这篇文章NPOI根据Excel模板生成原生的Excel文件实例&#xff0c;在这里先行谢过了。 本篇文章在邀月的基本上&#xff0c;做了一些小的改动&#xff0c;加上委托的机制。因为在做导出时&#xff0c;加载模板&#xff0c;下…

android 放大镜功能,简单实现Android放大镜效果

利用之前学过的图形图像绘画技术和图片添加特效技术&#xff0c;我们来实现一个Android放大镜的简单应用。最终效果如图具体实现:用来显示自定义的绘图类的布局文件res/layout/main.xml:xmlns:tools"http://schemas.android.com/tools"android:layout_width"fil…

android 音乐播放器的状态栏通知,Android仿虾米音乐播放器之通知栏notification解析...

通知栏notification是Android中一个很重要的组件&#xff0c;可以在顶部状态栏中存在&#xff0c;用户也可以通过此来操作应用&#xff0c;在Android中只有3.0以上的版本才加入了notification的按钮点击功能。先看一下仿虾米写出来的通知的效果这是一个自定义的notification&am…

mysql 查询语句_SQL语言mysql基础查询语句

单表查询、条件查询、查询并排序、限制结果查询、查询并排名、分组聚合查询、-- DQL操作&#xff0c;数据基本查询语言使用----------------------------------------------------------------------------------------------- -- 创建数据表-- 注释&#xff1a;员工编号&#…

mvdr波束形成原理_5G的“波束赋形”技术是什么东东?

工业互联网建设巳拉开帷幕&#xff0c;作为其“基础设施”的5G许多通信技术将发挥极大作用。波束赋形就是其中之一。电磁波发射波束、如不加人为干涉&#xff0c;是向其四周无死角散射&#xff0c;大部分是做无用功或浪费掉了。而5G的波束赋形技术、就是使用很多微型的毫米级天…

python 2 类与对象

1、类与对象的概念 类即类别、种类&#xff0c;是面向对象设计最重要的概念&#xff0c;从一小节我们得知对象是特征与技能的结合体&#xff0c;而类则是一系列对象相似的特征与技能的结合体。 那么问题来了&#xff0c;先有的一个个具体存在的对象&#xff08;比如一个具体存在…

mx4 pro 刷 原生 android,魅族MX4 Pro怎么刷机?通用刷机和固件升级教程

魅族MX4 Pro是一款性价比很高的手机&#xff0c;使用这款手机的用户也非常多。不过在魅族MX4 Pro的使用过程中&#xff0c;难免会出现系统方面的问题&#xff0c;又或者官方发布了新的固件升级包&#xff0c;这个时候就需要通过刷机的方法来解决问题或者升级魅族MX4 Pro固件。在…

#linux# su命令细节错误

2019独角兽企业重金招聘Python工程师标准>>> #前言# 在学习su命令时&#xff0c;几乎所有的国内书籍都说是切换用户功能。今天在linux系统下想开启httpd&#xff08;即Apache服务器&#xff09;&#xff0c;输入指令<code>service httpd start</code>结…

ASP.NET MVC5+EF6+EasyUI 后台管理系统(92)-打印EasyUI 的datagrid表格

前言 应用系统有时候需要打印Datagrid的表格内容&#xff0c;我们本节就来学习打印datagrid内容 打印主要使用&#xff1a;web打印&#xff08;我们之前有讲过web打印插件jqprint&#xff09; 将datagrid重新编制成可以打印的html格式 一、建立一个普通的例子 我们使用官方下载…

速读训练软件_记忆宫殿记忆力训练教程-第八天

第四部分 右脑开发及训练前面我们已经知道了右脑的记忆能力是左脑的100万倍&#xff0c;这可不是个小数字&#xff0c;如果我们能利用右脑来处理眼睛所收集到的信息&#xff0c;我们的记忆能力就会达到每分钟数万字的超级速度右脑不同于左脑的四种能力为&#xff1a;1、共振能力…

浅谈mysql的子查询

2019独角兽企业重金招聘Python工程师标准>>> mysql的子查询的优化一直不是很友好&#xff0c;一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一&#xff0c;mysql在处理子查询的时候&#xff0c;会将子查询改写,通常情况下&#xff0c;我们希望由内到…

选择符合语义的html标签,最容易犯的HTML标签错误写法

我们最好开始注意了,因为HTML Police会走遍你的代码然后挑出你所有没有语义的标签,这份列表包含了10个最经常犯得HTML标签错误,记下他们,能够让我们避免犯此常见错误,让我们的HTML标签符合语义,和标准的要求.罪行1:把块级元素放入了行内元素内HTML 元素的表现方式不外乎就两种:…