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,一经查实,立即删除!

相关文章

51芯片4*4列阵按键c语言程序,单片机城中社稷.doc

单片机城中社稷基于单片机的乳粉包装称重控制设计摘 要本论文在分析了国内外称重技术发展的基础上&#xff0c;着重对一个用于工业控制且功能较齐全的自动称重系统进行设计。随着自动化和管理现代化的进展&#xff0c;自动在线称重&#xff0c;快速动态称重在整个称重系统中有了…

linux 修改文件名_Linux常用命令

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

Redis学习日记-05:SORT命令

目录 前言命令&选项SORT&#xff08;默认根据元素由小到大&#xff09;&#xff1a;DESC&#xff08;逆序&#xff09;&#xff1a;ALPHA&#xff08;非数字元素排序&#xff09;&#xff1a;BY&#xff08;参考键&#xff09;&#xff1a;LIMIT(返回指定范围的结果)&#…

Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1

错误大致显示如下信息&#xff1a;04-14 07:39:18.325: E/AudioEffect(20584): set(): AudioFlinger could not create effect, status: -104-14 07:39:18.325: E/libOpenSLES(20584): Effect initCheck() returned -104-14 07:39:18.325: E/libOpenSLES(20584): Environmental…

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 目…

wxpython入门_wxpython笔记:Wxpython入门

#!/usr/bin/env python静态文本、可控文本、对话框、GetApp()importwx,timeID_EXIT200ID_ABOUT201class Frame(wx.Frame): #2 wx.Frame子类def __init__(self,parent None,id -1,title wxPython!):wx.Frame.__init__(self,parent,id,title,size(500,500))self.setupStatusBar…

C#常用加密方式

一、AES加密算法AES算法基于排列和置换运算。排列是对数据重新进行安排&#xff0c;置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。 AES是一个迭代的、对称密钥分组的密码&#xff0c;它可以使用128、192 和 256 位密钥&#xff0c;并且用 1…

C语言写文件到txt里有屯字,C语言10 文件.ppt

第十章 文件C文件概述文件类型指针文件的打开与关闭文件的读写文件的定位出错的检测赂恰滔氢戳骏市蔫盒少郴害篆汤看拴掳驮泅戈呕压琐憨波褪队敛紫爸戏仅C语言10 文件C语言10 文件10.1 C文件概述文件&#xff1a;存储在外部介质上数据的集合,是操作系统数据管理的单位文件分类按…

java中volatile的使用方式

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

python socketio_flask-socketio实现WebSocket的方法

【flask-socektio】之前不知道在哪个场合下提到过如何从web后台向前台推送消息。听闻了反向ajax技术这种模式之后&#xff0c;大呼神奇&#xff0c;试了一下之后发现也确实可以用。不过&#xff0c;反向ajax的代价也很明显&#xff0c;只要客户端还和服务端要有信息交互&#x…

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】文件操…

最大流自用模板(例题:HDU1532)

三种模板&#xff1a;Edmonds_Karp&#xff0c;Dinic&#xff0c;SAP 例题&#xff1a; Drainage Ditches&#xff08;HDU1532&#xff09; Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22365 Accepted Sub…

安卓手机python数据可视化_python 数据可视化

# -*- coding:utf-8 -*-# 异常值处理import pandas as pdaimport numpy as npyimport matplotlibmatplotlib.use(Agg)import matplotlib.pyplot as pylimport iodef index(data):# 输出结果必须为字典outputoutput {}# data pda.read_excel("D:/taobao2.xls")data …

$_SERVER

PHP $_SERVER 变量 $_SERVER 是一个包含诸如头信息&#xff08;header&#xff09;、路径&#xff08;path&#xff09;和脚本位置&#xff08;script locations&#xff09;的数组。它是 PHP 中一个超级全局变量&#xff0c;我们可以在 PHP 程序的任何地方直接访问它。 $_SERV…

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线…

python中的语言特性_python自测——语言特性

语言特性1.谈谈对 Python 和其他语言的区别答&#xff1a;Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库&#xff0c;他是一门强类型的可移植、可扩展&#xff0c;可嵌入的解释型编程语言&#xff0c;属于动态语言。拿 C 语言和 Python 比&…

使用NPOI和委托做EXCEL导出

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