栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Linux下cp命令的实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux下cp命令的实现

Linux下cp命令的实现(c语言)

学习计算机的小伙伴都应该知道Linux的cp命令,要是不了解大家可以查一下man手册,下面教大家用c语言怎么实现。



实现cp命令所用到的函数 open()打开和创建文件

open是多种语言、环境的一种函数,LINUX中open函数作用:打开和创建文件。PB程序语言中open功能:打开窗口。

打开和创建文件

int  open(constchar*pathname,int  flags);

pathname 是待打开/创建文件的POSIX路径名(如/home/user/a.cpp);
flags 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于fcntl.h)通过逻辑位或逻辑构成。

O_RDONLY只读模式
O_WRONLY只写模式
O_RDWR读写模式

if((fd_in = open(argv[1], O_RDONLY)) == -1) {
        perror(argv[1]);
        exit(1);
    }
creat()创建一个文件并以只写的方式打开
int creat(const char * pathname, mode_t mode);
函数功能:

创建一个文件并以只写的方式打开。如果原来该文件存在,会将这个文件的长度截短为0。

  if((fd_out= creat(argv[2], 0644)) == -1) {
        perror(argv[2]);
        exit(1);
    }
read()从文件中读
include 

ssize_t read  (int fd, void *buf, size_t count);

参数count是请求读取的字节数,读上来的数据保存在缓冲区buf中

成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0。

while((nread = read(fd_in, buf, BUFSSIZE)) > 0){
        if(write(fd_out, buf, strlen(buf)) != nread){
            perror("write");
            exit(1);
        }
        memset(buf, 0, BUFSSIZE + 5);
    }
write()函数

将数据写入已打开的文件内

write有两种用法。一种是:ssize_t write(int fd, const void *buf, size_t nbyte);
fd:文件描述符;
buf:指定的缓冲区,即指针,指向一段内存单元;
nbyte:要写入文件指定的字节数;

while((nread = read(fd_in, buf, BUFSSIZE)) > 0){
        if(write(fd_out, buf, strlen(buf)) != nread){
            perror("write");
            exit(1);
        }
        memset(buf, 0, BUFSSIZE + 5);
    }
具体代码实现
#include
#include
#include
#include
#include
#include
#include
#define BUFSSIZE 512

int main(int argc, char **argv) {
    int fd_in, fd_out;
    char buf[BUFSSIZE + 5] = {0};
    ssize_t nread;
    if(argc != 3) {
        printf("USEAG: %s SOURCEFILE DESTILE", argv[0]);
        exit(1);
    }
    if((fd_in = open(argv[1], O_RDONLY)) == -1) {
        perror(argv[1]);
        exit(1);
    }
    if((fd_out= creat(argv[2], 0644)) == -1) {
        perror(argv[2]);
        exit(1);
    }
    while((nread = read(fd_in, buf, BUFSSIZE)) > 0){
        if(write(fd_out, buf, strlen(buf)) != nread){
            perror("write");
            exit(1);
        }
        memset(buf, 0, BUFSSIZE + 5);
    }

    close(fd_in);
    close(fd_out);
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018811.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号