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

目录

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;
}


版权声明:本文为weixin_52872520原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。