首页 技术 正文
技术 2022年11月18日
0 收藏 974 点赞 5,003 浏览 1310 个字

之前,这篇文章:linux系统编程:自己动手写一个cp命令 已经实现过一个版本。

这里再来一个版本,涉及知识点:

linux系统编程:open常用参数详解

Linux系统编程:简单文件IO操作

 /*================================================================
* Copyright (C) 2018 . All rights reserved.
*
* 文件名称:cp.c
* 创 建 者:ghostwu(吴华)
* 创建日期:2018年01月10日
* 描 述:用open和write实现cp命令
*
================================================================*/ #include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> #ifndef BUFSIZE
#define BUFSIZE 1024
#endif int main(int argc, char *argv[])
{
int input_fd, output_fd, openflags;
mode_t fileperms;
ssize_t num; openflags = O_WRONLY | O_CREAT | O_TRUNC;
fileperms = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IXOTH; if( argc != || strcmp( argv[], "--help" ) == ) {
printf( "usage:%s old-file new-file\n", argv[] );
exit( - );
} //打开源文件
input_fd = open( argv[], O_RDONLY );
if( input_fd < ) {
printf( "源文件%s打开失败\n", argv[] );
exit( - );
} //创建目标文件
output_fd = open( argv[], openflags, fileperms );
if( output_fd < ) {
printf( "目标文件%s创建失败\n", argv[] );
exit( - );
} char buf[BUFSIZE]; //开始读取源文件的数据,向目标文件拷贝数据
while( ( num = read( input_fd, buf, BUFSIZE ) ) > ) {
if( write( output_fd, buf, num ) != num ) {
printf( "向目标文件%s写入数据失败\n", argv[] );
exit( - );
}
} if( num < ) {
printf( "读取源文件%s数据失败\n", argv[] );
exit( - );
} if( close( input_fd ) < ) {
perror( "close input_fd" );
exit( - );
}
if( close( output_fd ) < ) {
perror( "close output_fd" );
exit( - );
} return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,999
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,357
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,140
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848