实现 linux cp 命令
2016-11-11 17:47
435 查看
一、cp命令功能
cp命令的功能是拷贝一个文件或者目录
这里只是实现了cp命令拷贝文件的功能
二、需要用到的函数
open()、close()、read()、write()
这里的函数属于文件IO相关函数,是直接调用系统将文件写入内核中。
那么什么是标准IO呢?
①open---打开或创建一个文件
open(char *, flag, mode)在fcntl.h声明中。最多有三个参数:
功能:打开或创建一个文件
参数:第一个参数,char * 包含有文件名和路径
第二个参数,flag 打开文件参数
第三个参数,mode 创建文件和权限
flag内容: flag | 功能
O_RDONLY | 只读
O_WRONLY | 只写
O_RDWR | 读写
O_CREAT | 创建一个文件
O_EXCL | 如果使用O_CREAT时文件存在,则可返回错误消息。这一参数可测试文件是否存在。
O_TRUNC | 打开文件(会把已经存在的内容给删除)
O_APPEND | 追加方式打开文件(不会把已经存在的内容删除)
返回值:成功---返回文件描述符,它是一个非负的正整数,即文件的ID号,相当于人的身份证号;
出错---返回-1
什么是文件描述符?
内核中一个重要的功能是文件管理,系统中有非常多的文件,内核怎样认识每个文件呢?内核采用ID号的方式标示这些
文件,inode号,node号标示不同的文件,不如:ls -lai i , 只要文件不一样inode号就不一样。
那么这些内核文件的ID号,在每个用户的程序中怎样映射的呢?即文件描述符
文件描述符有什么规律呢?
程序进行时(进程),内核会自动打开 3个文件描述符,0,1,2,分别对应,标准输入、标准输出、标准出错,这样在程序
中,每打开一个文件,文件描述符值从三开始累加。
read(int fd, void *buf, size_t count)
参数:第一个参数---从那个文件中去读
第二个参数---读到什么地方去
第三个参数---读多少个
返回值:是实际读的字节数
write(int fd, void *buf, size_t count)
参数:第一个参数---向那个文件中去写
第二个参数--- 向这个文件中写什么内容
第三个删除--- 向这个文件中写多少个
返回值:是实际写的字节数
cp命令的功能是拷贝一个文件或者目录
这里只是实现了cp命令拷贝文件的功能
二、需要用到的函数
open()、close()、read()、write()
这里的函数属于文件IO相关函数,是直接调用系统将文件写入内核中。
那么什么是标准IO呢?
①open---打开或创建一个文件
open(char *, flag, mode)在fcntl.h声明中。最多有三个参数:
功能:打开或创建一个文件
参数:第一个参数,char * 包含有文件名和路径
第二个参数,flag 打开文件参数
第三个参数,mode 创建文件和权限
flag内容: flag | 功能
O_RDONLY | 只读
O_WRONLY | 只写
O_RDWR | 读写
O_CREAT | 创建一个文件
O_EXCL | 如果使用O_CREAT时文件存在,则可返回错误消息。这一参数可测试文件是否存在。
O_TRUNC | 打开文件(会把已经存在的内容给删除)
O_APPEND | 追加方式打开文件(不会把已经存在的内容删除)
返回值:成功---返回文件描述符,它是一个非负的正整数,即文件的ID号,相当于人的身份证号;
出错---返回-1
什么是文件描述符?
内核中一个重要的功能是文件管理,系统中有非常多的文件,内核怎样认识每个文件呢?内核采用ID号的方式标示这些
文件,inode号,node号标示不同的文件,不如:ls -lai i , 只要文件不一样inode号就不一样。
那么这些内核文件的ID号,在每个用户的程序中怎样映射的呢?即文件描述符
文件描述符有什么规律呢?
程序进行时(进程),内核会自动打开 3个文件描述符,0,1,2,分别对应,标准输入、标准输出、标准出错,这样在程序
中,每打开一个文件,文件描述符值从三开始累加。
read(int fd, void *buf, size_t count)
参数:第一个参数---从那个文件中去读
第二个参数---读到什么地方去
第三个参数---读多少个
返回值:是实际读的字节数
write(int fd, void *buf, size_t count)
参数:第一个参数---向那个文件中去写
第二个参数--- 向这个文件中写什么内容
第三个删除--- 向这个文件中写多少个
返回值:是实际写的字节数
/* 实现cp命令: */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> int main(int argc, char *argv[]) { int rd_fd, wr_fd;//读文件描述符 和 写文件描述符 char buf[128]={0}; int rd_ret = 0; if(argc < 3) { printf("please input src file and des file!\n"); return -1; } //打开源文件 rd_fd = open(argv[1], O_RDONLY); if(rd_fd < 0) { printf("open src file %s failed!\n", argv[1]); return -2; } printf("open src file %s succ, rd_fd = %d\n", argv[1], rd_fd); //打开目标文件 wr_fd = open(argv[2], O_WRONLY|O_CREAT); if(wr_fd < 0) { printf("open des file %s failed!\n", argv[2]); return -3; } while(1) { rd_ret = read(rd_fd, buf, 128); if(rd_ret < 128)//判断数据是否读取完毕 { break; } write(wr_fd, buf, rd_ret); memset(buf, 0, 128);//清理缓存 } write(wr_fd, buf, rd_ret);//做最后一次写入 //关闭文件描述符 close(wr_fd); close(rd_fd) return 0; }
相关文章推荐
- C语言拷贝文件函数实现(linux cp [source file] [target file] 命令的实现)
- 闲来无事 linux cp命令的三种实现方式
- 动手实现linux中的cp命令(可自行拓展)
- Linux系统利用cp命令实现强制覆盖功能的方法
- linux 的cp命令实现
- linux cp 命令的实现
- Linux下cp命令实现
- 动手实现linux中的cp命令(可自行拓展)
- 【C语言】实现Linux下的cp命令的基本功能
- linux下cp命令---C代码实现
- linux whoami cp mv mesg 命令 c语言实现(部分功能)
- Linux 实现cp 命令
- 嵌入式Linux cp命令实现
- 实现Linux下带进度显示的cp命令 - xcp
- 实现linux cp命令( 系统调用版 )
- linux cp 命令实现
- Linux 实现cp 命令
- Linux 实现cp 命令
- Linux&C编程之Linux系统命令“cp -r”的简单实现
- C语言实现Linux cp命令