七、Linux文件 - main函数参数讲解、代码实现cp指令

news2025/5/28 2:25:17

目录

1、main函数参数

2.cp指令的使用

3、实现cp指令

3.1实现cp指令-入门版

3.2实现cp指令-进阶版


1、main函数参数

int main(int argc,char *argv[])
{
    return 0;
}

        C语言规定了main函数的参数只能由2个,一个是argc,一个是argv,并且argc只能是整数,第二个必须是指向字符串的指针数组。

由于main函数不能被其他函数调用,因此不可能在程序内部取得实际值。那么,在何处把参数值赋予main函数的形参呢?实际上,main函数的参数值从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去,DOS提示符下命令行的一般形式为:

C:>可执行文件名 参数 参数......;但是应该特别注意的是,main的两个形参和命令行中的参数在位置上不是一一对应的。

  • argc:参数表示命令行中参数的个数(注意 文本名本身也是一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。
  • arfv:参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。指针数组的长度即为参数个数。数组元素初值由系统自动赋予。
  1.  vi test.c 进入文件,
  2. 编译后,输入命令 ./a.out src des                                                                                      param total 3
    param first is ./a.out                                                                                                                param second is src                                                                                                          param third is des

 

2.cp指令的使用

  1.  demo1.c  和demo2.c  里面的内容完全一样。 

3、实现cp指令

3.1实现cp指令-入门版

src 源文件   des 目标文件

执行流程:

  • 打开源文件(src) open
  • 打开目标文件(des) open
  • 写入目标文件 write
  • 读取src文件到缓存数组 read
  • 关闭目标文件和源文件 close
  • ./a.out   src.c des.c
  1. vi demo.c   创建demo.c文件
  2. 写入代码
  3. 实现cp指令的功能
  4. 查看demo1.c里面的内容
  5. 查看demo2.c里面的内容
  6. 比较demo1.c 和demo2.c的内容,发现仅仅将1024byte的内容写入demo2.c,功能正常。

3.2实现cp指令-进阶版

src 源文件   des 目标文件

执行流程:

  • 打开源文件(src) open
  • 打开目标文件(des) open
  • 使用whlie循环
    • 读取src文件到缓存数组 read
    • 写入目标文件 write
  • 关闭目标文件和源文件 close
  • ./a.out  src.c des.c
  1.   vi demo.c   创建demo.c文件
  2. 进入编辑代码
  3. 编译代码
  4. 比较src 和 des
  5. 这次就很完美的实现了。 

代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//int open(const char *pathname, int flags);
//int open(const char *pathname, int flags, mode_t mode);
#include <unistd.h>
//int close(int fd);
#include <unistd.h>
//int close(int fd);
#include <string.h>


int main(int argc,char *argv[])
{
        int src_fd;
        int des_fd;
        char readBuff[1024] = {0};
        int nRet = 0;

        if(argc != 3)
        {
                printf("error\n");
                return -1;
        }
        src_fd = open(argv[1],O_RDWR);
        if(src_fd < 0)
        {
                printf("open file %d failed!\n",src_fd);
        }

        des_fd = open(argv[2],O_RDWR | O_CREAT,0755);
        if(des_fd < 0)
        {
                printf("open file %d failed!\n",des_fd);
        }

        while(1)
        {

                nRet = read(src_fd,&readBuff[0],128);
                if(nRet <128)
                {
                        break;
                }
                write(des_fd,readBuff,nRet);
                memset(readBuff,0,128);
        }

        write(des_fd,readBuff,nRet);



        close(src_fd);
        close(des_fd);
        return 0;
}

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

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

相关文章

[Leetcode] 打开转盘锁(BFS求最短路径)

题目链接&#xff1a;https://leetcode.cn/problems/open-the-lock/你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字&#xff1a; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 。每个拨轮可以自由旋转&#xff1a;例如把 9 变为 0&#xff0c;0 变为 9 。每次旋转都只能旋转一个拨轮…

你不会还不知道arrify的内部到底是怎么执行的吧?

作为一个前端工程师&#xff0c;经常会遇见转换成数组的需求&#xff0c;被转换的对象有可能是String、Set()、null、Map()、undefined、或者是数组本身。我们最经常的做法就是写一个arrify函数帮我去进行转换。久而久之因为经常会做不同的项目中遇到同样的需求所以我们通常会把…

WeNet - 初识

文章目录关于 WeNet快速上手识别训练环境准备训练关于 WeNet Production First and Production Ready End-to-End Speech Recognition Toolkit github: https://github.com/wenet-e2e/wenet官方中文说明&#xff1a;https://github.com/wenet-e2e/wenet/blob/main/README_CN.md…

分享宠物店微信小程序制作步骤_宠物店管理系统怎么做

大多数人对于动物医疗专业知识比较匮乏&#xff0c;再加上宠物医疗费用&#xff0c;日常用品都略高&#xff0c;宠物店/宠物医院的前景&#xff0c;再未来依旧可观。 相比于实体店&#xff0c;线上平台无疑有着更广阔的拓客渠道和销售前景&#xff0c;做宠物店/宠物医院小程序…

Java进阶(下篇)

Java进阶&#xff08;下篇&#xff09;Java进阶 P387一、IDEA使用与多线程1.概述①idea安装②IDEA常用设置③idea快捷键设置④模板的使用和设置2.程序进程、线程概念3.单核cpu与多核cpu任务执行_ 并行与并发4.多线程优点5.创建多线程方式一&#xff1a;继承Thread类6.线程常用方…

[oeasy]python0078_设置索引颜色_index_color_ansi_控制终端颜色

更多颜色 回忆上次内容 上次 了解了 高亮颜色 91-97 是 高亮 前景色101-107是 高亮 背景色 颜色种类 在原来基础上 增加了一些但也非常有限 还想要 更精细的颜色 有可能吗&#xff1f;&#xff1f;&#x1f914; 更多颜色 继续深挖 关于 逃逸字符的文档 可以用 索引颜色 …

MyBatis源码概述及运行原理解析(篇一)

&#x1f426;MyBatis源码概述及运行原理解析 MyBatis的整体架构分为三层&#xff0c;分别是基础支持层、核心处理层和接口层 &#x1f58c; 中文注释源码Git地址 &#x1f5bd;架构图 &#x1f4c2;源码结构 &#x1f4c1;parsing包 &#x1f5ca;parsing包对应基础支持层中…

Matlab论文插图绘制模板第76期—半对数刻度折线图(Semilogx和Semilogy)

在之前的文章中&#xff0c;分享了Matlab双对数刻度折线图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下半对数刻度折线图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;Matlab论文插图绘制模板系列&#xff0c;旨在降低大家使用Matlab进行科研…

为什么bitnami 安装的软件进入容器,用户名都是I have no name

文章目录背景原因user 参数的缺陷一### user 参数的缺陷二Docker 官方的解决方案背景 在bitnami 安装的软件进入容器用户名都显示I have no name&#xff0c;这是什么原因呢&#xff1f; 原因 在k8中容器默认好像是以uid1001启动的&#xff0c;可以修改该uid docker 启动的时…

leaflet 实现左卷帘效果 (代码示例045)

第045个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中实现左卷帘效果,这里主要引用了leaflet-side-by-side这个插件,直接调用的话,CSS方面有些问题,需要自行调整一下。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配…

目标检测论文阅读:GaFPN算法笔记

标题&#xff1a;Construct Effective Geometry Aware Feature Pyramid Network for Multi-Scale Object Detection 会议&#xff1a;AAAI2022 论文地址&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/19932 文章目录Abstract1. Introduction2. Related Work2.…

探索 Google 的 Bard AI 的强大功能

谷歌最近推出了名为“Bard AI”的新人工智能项目。 该项目旨在改善人工智能的语言和创造力&#xff0c;是谷歌旨在推进人工智能发展的更大“红色代码”计划的一部分。 该项目的主要目标是开发一种可以生成创意写作的语言模型。 什么是巴德人工智能&#xff1f; Bard AI 是一种…

Python 数据库开发实战 - Python与Redis交互篇- 缓存新闻数据至redis

实现新闻缓存功能 - “news_dao.py” - 从数据库提取明确的新闻数据保存至 redis - search_cache() 方法 只有在新闻被管理员审批通过的时候&#xff0c;新闻才可以缓存到 redis 里面。 管理员在 “审批新闻” 的时候是可以获得到 “被审批通过的新闻” 的 id&#xff0c;所以…

Allegro如何用Label Tune功能自动调整丝印到器件中心

Allegro如何用Label Tune功能自动调整丝印到器件中心 在做PCB设计的时候,调整丝印是比较费时的工作,如果需要把整板的丝印位号调整到器件的中心做装配图使用,Allegro的Label Tune功能支持快速把丝印位号居中到器件中心。 以下图为例,快速把所有丝印位号居中 调整前 调整后…

若依框架 --- 偶发的el-select无法选择的问题

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

RBCD深度利用之“烂番茄”

1.RBCD简介 本篇文章是在基于资源的约束委派的基础上的一个利用&#xff0c;篇幅会比较短&#xff0c;但个人认为利用面还是挺广泛的。于是就写一下。 首先&#xff0c;需要了解的是RBCD的基础知识&#xff1a; 简单回顾一下&#xff1a; 基于资源的约束委派(RBCD) 只支持2…

微电网两阶段鲁棒优化经济调度方法[3]【升级优化版本】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型 【论文原文】&#xff1a;DEGREE A Data-Efficient Generation-Based Event Extraction Mode 【作者信息】&#xff1a;I-Hung Hsu &#xff0c; Kuan-Hao Huang&#xff0c; Elizabeth Boschee &#xff…

【总结】1591- 从入门到精通:使用 TypeScript 开发超强的 CLI 工具

作为一名开发者&#xff0c;掌握 CLI 工具的开发能力是非常重要的。本文将指导你如何使用 TypeScript 和 CAC 库开发出功能强大的 CLI 工具。快速入门首先&#xff0c;需要先安装 Node.js 和 npm&#xff08;Node Package Manager&#xff09;&#xff0c;然后在项目目录中创建…

【正点原子FPGA连载】第七章程序固化实验摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

第七章程序固化实验 在前面的几个实验中&#xff0c;我们都是通过JTAG接口将FPGA配置文件和应用程序下载到MPSOC器件中。接下来我们将尝试把程序存储在非易失性存储器中&#xff0c;在上电或者复位时让程序自动运行&#xff0c;这个过程需要启动引导程序&#xff08;Boot Load…