七、Linux文件 - main函数参数讲解、代码实现cp指令
创始人
2024-05-25 02:10:25
0

目录

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 
#include 
#include 
#include 
//int open(const char *pathname, int flags);
//int open(const char *pathname, int flags, mode_t mode);
#include 
//int close(int fd);
#include 
//int close(int fd);
#include 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;
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...