Linux---cp命令学习
cp命令
cp source_file target_file
能够复制文件,如果target_file所指定的文件不存在,cp就创建这个文件,如果已经存在,就把文件内容清空并把source_file的内容添加到target_file中。
cp命令的工作流程
open sourcefile for reading
open targetfile for writing
+--> read from source to buffer ---- eof ? --- +
| |
----- write from buffer to copy <------------- +
close sourcefile
close targetfile
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h> #define BUFFERSIZE 4096
#define COPYMODE 0644 void oops(char *s1, char *s2);
int main(int ac,char *av[])
{
int in_fd,out_fd,n_chars;
char buf[BUFFERSIZE]; if(ac != )
{
fprintf(stderr,"usage:%s source destination\n",*av);
exit();
} if( (in_fd = open(av[],O_RDONLY)) == -)
{
oops("Cannot open" , av[]);
} if( (out_fd = creat(av[],COPYMODE)) == - )
{
oops("Cannot open" , av[]);
} while( ( n_chars = read(in_fd,buf,BUFFERSIZE)) > )
if( (write(out_fd,buf,n_chars)) != n_chars)
oops("Write error to ", av[]); if(n_chars == -)
oops("Read error from ",av[]); if(close(in_fd) == - || close(out_fd) == -)
oops("Error closing files",""); } void oops(char *s1, char *s2)
{
fprintf(stderr,"Error:%s",s1);
perror(s2);
exit(); }
效果如下

使用到的函数:
1.int fd = creat(char * filename, mode_t mode)
creat告诉内核创建一个filename的文件,如果不存在,则直接创建,如果存在,则先把文件的内容清空,把文件长度设置为0。并且把文件的权限设置为mode
2.ssize_t result = write(int fd,void * buf,size_t amt)
write这个系统调用告诉内核把数据写入文件中,如果写入失败返回 -1 ,成功返回写入的字节数。
cp命令的分析
1. 缓冲区的影响
缓冲区的大小对我们这个程序的运行速度是有影响的,举一个例子:用小勺子把汤从一个碗里盛到另一个碗里,可能要盛十几次,当换成一个大一点的勺子,可能只需要几次。
2. 系统调用的开销
使用系统调用会消耗很多时间,用户进程位于用户空间,内核进程位于内核空间,磁盘只能被内核直接访问。当我们要读取文件时,需要使用系统调用read,而read在内核空间中,因此,执行的时候是从用户空间切换到内核空间,这是需要时间的。为什么需要时间?当CPU从用户模式切换到管理员模式时,需要进行一些环境的配置,如一些特殊的堆栈和内存环境。当使用完系统调用时,CPU就又要从管理员模式切换到用户模式,也需要花费一些时间,因此,在一些程序中应该节约类似于模式切换的开销。
本篇笔记自拜读《 Unix/Linux编程实践教程》
我也推荐和我一样的初学者去拜读这本书,让你对linux有可下手的地方。
Linux---cp命令学习的更多相关文章
- Linux cp命令使用说明
Linux cp命令使用说明 --功能说明:复制目录或文件 --命令格式:cp [参数] <文件或目录> <文件或目录> --常用参数: -R 复制目录 -i 覆盖文件之 ...
- linux基础命令学习笔记(二)
linux基础命令学习笔记(二) 1.kill :终止进程 kill pid (唯一标示一个进程) kill -9 强制终止 kill -15 命令未结束不能终止 # ps aux 查看所有进程 ...
- Linux cp命令详解
Linux cp命令 Linux cp命令主要用于复制文件或目录,将源文件复制至目标文件,或将多个源文件复制至目标目录 用法: cp [选项]... [-T] 源文件 目标文件 cp [选项]... ...
- Linux常用命令学习4---(挂载命令mount umount、用户登陆查看和用户交互命令 w who last lastlog)
紧接着上一篇Linux的命令行的学习:Linux学习3---(文件的压缩和解压缩命令zip unzip tar.关机和重启命令shutdown reboot……) 1.挂载命令 简介 ...
- 【初级】linux cp 命令详解及使用方法实战
cp:复制文件或者目录 前言: cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不 ...
- Linux常用命令学习
1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: ls -a 列出目录所有文 ...
- linux cp命令参数及用法详解
cp (复制档案或目录)[root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)[root@linux ~]# cp [options] ...
- Linux rsync 命令学习
Rsync命令和cp命令很像,但是功能似乎更加复杂点,主要用来备份数据.看了网上一堆介绍的文章,感觉不是很通俗易懂.下面按照我的理解,做一些笔记: 同步方式 之前接触过一些同步软件,例如坚果云.百度云 ...
- 【Linux】命令学习笔记和总结
莫名的想学习一下Linux了,因为对这方面的知识储备为0.对于命令行界面始终是零接触零了解,对一个程序员来说这几乎是致命的,所以简单了解一下. 一.教程参考 参考菜鸟教程即可: Linux 教程 | ...
- 五个知识体系之-Linux常用命令学习
1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: ls -a 列出目录所有文 ...
随机推荐
- nginx丢弃http包体处理
http框架丢弃http请求包体和上一篇文章http框架接收包体, 都是由http框架提供的两个方法,供http各个模块调用,从而决定对包体做什么处理.是选择丢弃还是接收,都是由模块决定的.例如静态资 ...
- Java 实现大转盘抽奖
需要用到 JAVA中的Random()函数 注意:大转盘抽奖各奖项中奖概率之和为 1.奖品列表中的概率为累加概率,需要按照添加进列表的顺序进行累加,添加顺序不做要求. 实际中使用需要考虑奖品数量限制等 ...
- Redis内核原理及读写一致企业级架构深入剖析1-综合组件环境实战
1 Redis 工作模型 redis实际上是个单线程工作模型,其拥有较多的数据结构,并支持丰富的数据操作,redis目前是原生支持cluster模式.如果需要缓存能够支持更复杂的结构和操作,基于以上原 ...
- Stream流、方法引用
Stream流.方法引用 Stream流.方法引用 Stream流.方法引用 Stream流.方法引用 Stream流.方法引用 ... ...
- iOS开发 - CocoaPods远程私有库从0到1
1. 创建主工程 路径:/Users/Funky/Desktop/CocoaPodRemoteLib/MyMainProject/MyMainProject.xcodeproj 2. 在码云(htt ...
- props简单小栗子
props简单小栗子 可以直接copy查看结果 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- htmlunit最具有参考意义项目
### HtmlUnit What? - 项目1 https://gitee.com/dgwcode/spiderTmallTradeInfo - 项目2 https://gitee.com/dgwc ...
- PHP学习 文件操作函数的应用--简单网络留言模板
<?php /** 网络留言板模式 主要运用到的函数有 fopen fclose flock fwrite fread explode list */ ?> <meta http-e ...
- JD孔_20160912
1.买的 “航嘉(Huntkey)大白803 8位3米 总控开关 防过载保护 插座/排插/拖” http://item.jd.com/1786149.html#product-detail 2.
- Spark Mllib里相似度度量(基于余弦相似度计算不同用户之间相似性)(图文详解)
不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 协调过滤算法,是一种基于群体用户或者物品的典型推荐算法,也是目前常用的推荐 ...