Linux实现类似cp的命令

1.利用主函数的三个函数进行传参

1).主函数的三个参数的含义:

argc:主函数的参数个数

argv:主函数的参数内容

envp:环境变量;

2).演示代码:

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char *argv[],char *envp[])
{  
    int i=0;
    printf("argc=%d\n",argc);

   // for(;i<argc;i++)
   for(;argv[i]!=NULL;i++)
    {
        printf("argv[%d]=%s\n",i,argv[i]);
    }
     return 0;
}
bash 复制代码
gcc -o main main.c 
./main
./main hello 123
#观察运行结果思考argc和argv参数的含义;

3).环境变量

cpp 复制代码
 for(i=0;envp[i]!=NULL;i++)
 {
      printf("envp[%d]=%s\n",i,envp[i]);
 }

4).总结:

argc:传递给主函数的参数个数

argv:传递给主函数的参数列表,字符指针数组 ,给主函数传递的参数都是字符串;(以NULL结尾)

envp:继承的环境变量列表,以NULL结尾;

2.利用文件操纵进行复制

2.1.open的介绍

open重载:两个参数用于打开一个已经存在的文件;三个参数的用于新建一个文件,并设置访问权限;

pathname:文件和路径和名称;

flags:文件的打开方式;

mode:文件的权限,如"0600";

2.2.write 的介绍

fd:对应打开的文件描述符

buf:写入的文件内容;

count:要写入多少个字节; 返回值:ssize_t:实际写入了多少个字节;

2.3.read的介绍

fd:对应打开的文件描述符;

buf:把文件内容读取到一块空间buf中;

count:期望要读取的字节数; 返回值:ssize_t:实际读取了多少个字节;

2.4.close的介绍

关闭文件描述符

2.5.文件描述符

文件打开以后,内核给文件的一个编号;(>0的整数)

0:标准输入; 1:标准输出; 2:标准错误输出;

3.具体代码

cpp 复制代码
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
    if(argc!=3)
    {
        printf("argc error\n");
    }
    char *file_name=argv[1];
    char *newfile_name=argv[2];

    int fdr=open(file_name,O_RDONLY);
    int fdw=open(newfile_name,O_WRONLY|O_CREAT,0600);

    if(fdr==-1||fdw==-1)
    {
        exit(0);
    }

    char buff[256]={0};
    int num=0;

    while((num=read(fdr,buff,256))>0)
    {
        write(fdw,buff,num);
    }
    close(fdr);
    close(fdw);

    exit(0);
}

运行结果:

相关推荐
xuhe24 分钟前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
Lsir10110_20 分钟前
【Linux】进程信号(下半)
linux·运维·服务器
酉鬼女又兒38 分钟前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面40 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
zl_dfq42 分钟前
Linux 之 【多线程】(pthread_xxx、轻量级进程、原生线程库、线程ID、__thread、线程栈、线程与信号、线程与程序替换)
linux
choke23343 分钟前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
AZ996ZA1 小时前
自学linux的第二十一天【DHCP 服务从入门到实战】
linux·运维·服务器·php
_OP_CHEN1 小时前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
Fleshy数模2 小时前
MySQL 表创建全攻略:Navicat 图形化与 Xshell 命令行双模式实践
linux·mysql
神梦流2 小时前
GE 引擎的非标准数据流处理:稀疏张量与自定义算子在图优化中的语义保持
linux·运维·服务器