linux自己写mycp文件的函数,linux系统编程:自己动手写一个cp命令

cp命令的基本用法: cp 源文件 目标文件

如果目标文件不存在 就创建, 如果存在就覆盖

实现一个cp命令其实就是读写文件的操作:

对于源文件: 把内容全部读取到缓存中,用到的函数read

对于目标文件: 把缓存中的内容全部写入到目标文件,用到的函数creat

/*================================================================

* Copyright (C) 2018 . All rights reserved.

*

* 文件名称:mycp.c

* 创 建 者:ghostwu(吴华)

* 创建日期:2018年01月08日

* 描 述:cp命令编写

*

================================================================*/

#include

#include

#include

#include

#include

#include

#define COPYMODE 0644

#define BUF 4096

int main(int argc, char *argv[])

{

if ( argc != ){

printf( "usage:%s source destination\n", argv[] );

exit( - );

}

int in_fd = -, out_fd = -;

if( ( in_fd = open( argv[], O_RDONLY ) ) == - ) {

perror( "file open" );

exit( - );

}

if ( ( out_fd = creat( argv[], COPYMODE ) ) == - ) {

perror( "file copy" );

exit( - );

}

char n_chars[BUF];

int len = ;

while( ( len = read( in_fd, n_chars, sizeof( n_chars ) ) ) > ) {

if ( write( out_fd, n_chars, len ) != len ) {

printf( "文件:%s发生copy错误\n", argv[] );

exit( - );

}

}

if( len == - ) {

printf( "读取%s文件错误\n", argv[] );

exit( - );

}

if( close( in_fd ) == - ) {

printf( "文件%s关闭失败\n", argv[] );

exit( - );

}

if( close( out_fd ) == - ) {

printf( "文件%s关闭失败\n", argv[] );

exit( - );

}

return ;

}

linux系统编程综合练习-实现一个小型的shell程序(一)

之前已经花了不少篇幅学习了linux系统编程的很多知识点:文件与io.进程.信号.管道,而零散的知识点,怎么能够综合的串接起来是学习的一个很重要的目的,当然最好的方式就是用所学的知识点做一个项目了,所 ...

linux系统编程综合练习-实现一个小型的shell程序(四)

上节中已经对后台作业进行了简单处理,基本上要实现的功能已经完了,下面回过头来,对代码进行一个调整,把写得不好的地方梳理一下,给代码加入适当的注释,这种习惯其实是比较好了,由于在开发的时候时间都比较紧, ...

linux系统编程综合练习-实现一个小型的shell程序(三)

上节中已经实现了对普通命令的解析,包括输入重定向,输出重定向,管道,后台作业,这次就来执行已经解析好的命令,对应的函数为:execute_command(),首先对带有管道的命令进行执行: 比如:&q ...

linux系统编程综合练习-实现一个小型的shell程序(二)

上节minishell当中,已经初步实现了一个简单命令的解析,这节来继续对更加复杂命令进行解析,包含:输入重定向的解析.管道行的解析.输出重定向的解析以及是否有后台作业的解析,如下: 下面对其进行实现 ...

Linux系统编程(14)——shell常用命令

1. ls命令 ls命令是列出目录内容(ListDirectory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. "ls -l"命令已详情模式 ...

linux系统编程:自己动手写一个who命令

who命令的作用用于显示当前有哪些用户登录到系统. 这个命令执行的原理是读取了系统上utmp文件中记录的所有登录信息,直接显示出来的 utmp文件在哪里呢? man who的时候,在手册下面有这么一段 ...

linux系统编程:自己动手写一个pwd命令

pwd命令:打印当前的工作目录 我们都知道每个目录下面都有两个特殊的目录( . 和 .. ), .: 当前目录, ..: 上层目录,  每个目录都有一个i节点与之相关联 ghostwu@ubuntu: ...

linux系统编程:自己动手写一个ls命令

ls用于列举目录内容,要实现这个功能,毫无疑问,需要读取目录,涉及到两个api: opendir:DIR *opendir(const char *name), 传文件名,返回一个指针,指向目录序列 ...

linux系统编程:cp的另外一种实现方式

之前,这篇文章:linux系统编程:自己动手写一个cp命令 已经实现过一个版本. 这里再来一个版本,涉及知识点: linux系统编程:open常用参数详解 Linux系统编程:简单文件IO操作 /*= ...

随机推荐

WIN32/API/SDK/MFC四者之间的联系和区别

上面大家都说Win32是一个子系统,这个当然是对的,不过我们有时候我们所说Win32通俗的就是指32位的Windows系统,从 windows95/98到NT/2000/XP都是32位Windows. ...

[POJ1007]DNA Sorting

[POJ1007]DNA Sorting 试题描述 One measure of ``unsortedness'' in a sequence is the number of pairs of en ...

xcode6 中增加SDWebImage/SDWebImageDownloaderOperation.m报错解决方法

报错报错:Use of undeclared identifier '_executing' / '_finished': 解决方法例如以下:

xshell 快速复制打开之前用过的ssh

有时候需要对一个ip地址的服务器进行多个操作,不在一个会话中,需要新建多个同样的会话 然后左键单击+号 出现一个新的会话 然后再右键单击+号 选择之前保存过的ip地址即可快速创建!

threejs深入纹理,立体场景cubeResolution(四)

在这个课程里主要完成讲解两个demo: 一个是电视墙:用视频做纹理 一,用视频做纹理 首先我们用video标签把视频源引入:

(网页)HTMl5的sessionStorage和localStorage

百度上百度的,记录一下: html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. sessionStorage用于本地存储一个会话(sessi ...

获取Methods成员方法类

位于java.lang.reflect.Method包中 getModifiers() 成员方法的修饰符 getName() 成员方法的名字 getReturnType() 成员方法的声明类型 get ...

caffe添加自己编写的Python层

由于Python的灵活性,我们在caffe中添加自己定义的层时使用python层会更加方便,开发速速也会比C++更快,现在我就在这儿简单说一下如何在caffe中添加自定义的python层(使用的原网络 ...

清除li内a标签的float=left实现a标签在li内居中显示(ul内li不居中显示)

写在前面: 修改cnblogs主页面菜单显示问题. 问题描述:在给主菜单添加hover样式后发现菜单内容并未居中.见图1. 网上搜索到资料其中一篇讲的可以说简明扼要了,也是伸手党的福利(点我查看原文) ...

bat 调用exe

@set errorlevel=>nul :reInput @echo 请输入批次号: @set/p 批次号= >nul @set 批次号|findstr "\\

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值