重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

c语言cp函数 c语言和cpp

基于C语言的简单cp命令实现?

main函数的参数,就是命令执行时,传给程序的参数,一般两个,一个是整数,表示传入参数的个数,一个是字符串数组,传入的参数,都是字符串,命令行输入时用空格分隔。

我们提供的服务有:成都做网站、成都网站建设、微信公众号开发、网站优化、网站认证、鸡西梨树ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的鸡西梨树网站制作公司

可以用system(ls)命令,生成目录名称,突出到文件,通过字符处理,查看文件属性,对于目录,执行下一级cp,对于一般文件,按二进制文件读写复制。

C语言实现CP指令

用C实现的步骤是:

1、解析命令,就是提取出源路径和目标路径,以及文件名。

2、写一个切换目录的函数,比如chgdir(char *),路径名字做参数。

3、执行切换目录函数,正确执行后,在这个目录下找到目标文件,定义一个缓冲区,把文件内容拷贝进去,找不到文件另作处理。

4、再调用2步骤中的目录切换函数,在目标路径下建立一个空文件并把缓冲区内容写进去,保存。

c语言中cp是什么意思

cp在c语言中没有特别的含义

在linux系统中,它是一个命令行程序,作用是copy文件

next;而是np=cp->next;delete cp;cp=n'>c语言为什么不用cp=cp->next;而是np=cp->next;delete cp;cp=n

cp是一个指针,如果直接用cp的next赋值给cp,cp原来指向的内存地址就无法释放,造成内存泄漏。

linux中cp命令如何用 C语言实现

1,首先需要了解cp的原理。

2,可以参考cp的源码去了解其原理

3,cp命令的源码可以在linux内核中找到。

4,或者下载busybox其中也会有cp的源码

只有了解其原理之后才能谈如何实现。参考代码如下:

#include stdio.h

#include stdlib.h

#include sys/stat.h

#include sys/types.h

#include fcntl.h

#include errno.h

#include unistd.h

#include string.h

#define BUF_SIZE 1024

#define PATH_LEN 128

void my_err(char *err_string, int line )

{

fprintf(stderr,"line:%d ",line);

perror(err_string); 

exit(1);

}

void copy_data(const int frd,const int fwd)

{

int read_len = 0, write_len = 0;

unsigned char buf[BUF_SIZE], *p_buf;

while ( (read_len = read(frd,buf,BUF_SIZE)) ) {

if (-1 == read_len) {

my_err("Read error", __LINE__);

}

else if (read_len  0) { //把读取部分写入目标文件

p_buf = buf;

while ( (write_len = write(fwd,p_buf,read_len)) ) {

if(write_len == read_len) {

break;

}

else if (write_len  0) { //只写入部分

p_buf += write_len;

read_len -= write_len;

}

else if(-1 == write_len) {

my_err("Write error", __LINE__);

}

}

if (-1 == write_len) break;

}

}

}

int main(int argc, char **argv) 

{

int frd, fwd; //读写文件描述符

int len = 0;

char *pSrc, *pDes; //分别指向源文件路径和目标文件路径

struct stat src_st,des_st;

if (argc  3) {

printf("用法 ./MyCp 源文件路径 目标文件路径\n");

my_err("arguments error ", __LINE__);

}

frd = open(argv[1],O_RDONLY);

if (frd == -1) {

my_err("Can not opne file", __LINE__);

}

if (fstat(frd,src_st) == -1) {

my_err("stat error",__LINE__);

}

/*检查源文件路径是否是目录*/

if (S_ISDIR(src_st.st_mode)) {

my_err("略过目录",__LINE__);

}

pDes = argv[2];

stat(argv[2],des_st);

if (S_ISDIR(des_st.st_mode)) { //目标路径是目录,则使用源文件的文件名

len = strlen(argv[1]);

pSrc = argv[1] + (len-1); //指向最后一个字符

/*先找出源文件的文件名*/

while (pSrc = argv[1]  *pSrc != '/') {

pSrc--;

}

pSrc++;//指向源文件名

len = strlen(argv[2]); 

// . 表示复制到当前工作目录

if (1 == len  '.' == *(argv[2])) {

len = 0; //没有申请空间,后面就不用释放

pDes = pSrc;

}

else { //复制到某目录下,使用源文件名

pDes = (char *)malloc(sizeof(char)*PATH_LEN);

if (NULL == pDes) {

my_err("malloc error ", __LINE__);

}

strcpy(pDes,argv[2]);

if ( *(pDes+(len-1)) != '/' ) { //目录缺少最后的'/',则补上’/‘

strcat(pDes,"/");

}

strcat(pDes+len,pSrc);

}

}

/* 打开目标文件, 使权限与源文件相同*/ 

fwd = open(pDes,O_WRONLY | O_CREAT | O_TRUNC,src_st.st_mode);

if (fwd == -1) {

my_err("Can not creat file", __LINE__);

}

copy_data(frd,fwd);

//puts("end of copy");

if (len  0  pDes != NULL)

free(pDes);

close(frd);

close(fwd);

return 0;

}

用C语言 写unix 的 cp指令

你问的不是很清楚。

cp命令的话

cp dir1 dir2肯定不行的嘛,拷贝目录要加-R 或者-a参数的。

如果是自己写程序实现cp命令的话,用stat, 或者 lstat 或者 fstat函数。

具体查manpage.


新闻名称:c语言cp函数 c语言和cpp
文章分享:http://cqcxhl.cn/article/hpjcgd.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP