当前位置:首页 » 编程语言 » linux文件拷贝c语言

linux文件拷贝c语言

发布时间: 2024-07-16 12:10:22

‘壹’ 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>

#defineBUF_SIZE1024
#definePATH_LEN128

voidmy_err(char*err_string,intline)
{
fprintf(stderr,"line:%d",line);
perror(err_string);
exit(1);
}

void_data(constintfrd,constintfwd)
{
intread_len=0,write_len=0;
unsignedcharbuf[BUF_SIZE],*p_buf;

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

if(-1==read_len){
my_err("Readerror",__LINE__);
}
elseif(read_len>0){//把读取部分写入目标文件
p_buf=buf;
while((write_len=write(fwd,p_buf,read_len))){
if(write_len==read_len){
break;
}
elseif(write_len>0){//只写入部分
p_buf+=write_len;
read_len-=write_len;
}
elseif(-1==write_len){
my_err("Writeerror",__LINE__);
}
}
if(-1==write_len)break;
}
}
}

intmain(intargc,char**argv)
{

intfrd,fwd;//读写文件描述符
intlen=0;
char*pSrc,*pDes;//分别指向源文件路径和目标文件路径
structstatsrc_st,des_st;

if(argc<3){
printf("用法./MyCp<源文件路径><目标文件路径> ");
my_err("argumentserror",__LINE__);
}

frd=open(argv[1],O_RDONLY);
if(frd==-1){
my_err("Cannotopnefile",__LINE__);
}

if(fstat(frd,&src_st)==-1){
my_err("staterror",__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("mallocerror",__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("Cannotcreatfile",__LINE__);
}
_data(frd,fwd);
//puts("endof");
if(len>0&&pDes!=NULL)
free(pDes);

close(frd);
close(fwd);

return0;
}

‘贰’ 濡备綍灏唋inux涓镄刢璇瑷澶嶅埗鍑烘潵

鏂囦欢淇濆瓨鍒癠鐩桦氨鍙浠ャ备篃鍙浠ラ氲繃缃戠粶鍏变韩銆

‘叁’ 在linux下,写一个c语言程序把一个文件的内容写入另一个文件中

#include<stdio.h>

main()

{

FILE*fi,*fo;

charc;

fi=fopen("input","r");

fo=fopen("output","w");

while(fscanf(fi,"%c",&c)!=EOF)

fprintf(fo,"%c",c);

fclose(fi);

fclose(fo);

}

‘肆’ 在linux下如何用c语言实现在服务器接受文件的时候转发给另一个服务器

题目说得比较清楚,但问题说明确让人摸不着头脑。
根据题目的意思,其实这个问题很好解决:一旦服务器接收到文件后(接收程序是自己编写的程序),则调用三方ftp的C语言库,将文件ftp到另一个服务器即可。
若服务器接收文件不是通过自己写的程序,如是通过NFS写过来的,则需要专门写一个简单的同步程序,定时检查指定目录下的文件属性,一旦发现有新文件,则ftp到另一个服务器即可。

‘伍’ 怎么用C语言复制文件或者移动文件,不要用system的命令。Linux命令cp cat都不行,我要

要求 c:\source.txt文件必须存在,可以自己建立一个这样的文本文件,并输入一些数据,以便测试。
复制文件:源文件c:\source.txt 复制到c:\dex.txt
#include<stdio.h>
void main()
{
FILE *fp1,*fp2;
char str1;
fp2=fopen("c:\\des.txt","w");
if((fp1=fopen("C:\\source.txt","r"))==NULL)
{
printf("file cannot be opened\n");
return;
}
while((str1=fgetc(fp1))!=EOF)
fputc(str1,fp2);
fclose(fp1);
fclose(fp2);
}
希望能够帮到你。

移动文件:源文件c:\source.txt 移动到c:\dex.txt
#include<stdio.h>
void main()
{
FILE *fp1,*fp2;
char str1;
fp2=fopen("c:\\des.txt","w");
if((fp1=fopen("C:\\source.txt","r"))==NULL)
{
printf("file cannot be opened\n");
return;
}
while((str1=fgetc(fp1))!=EOF)
fputc(str1,fp2);
fclose(fp1);
fclose(fp2);
remove("c:\\source.txt");
}

‘陆’ 在Linux系统系下vi操作中C语言编程,如何进行复制粘贴求救!

在非输入状态下,复制命令是YY(对着你要复制的内容连旦芦信续按两下字母“Y”),粘帖是P 。
根据提问者补充:
如果是多行复制的话,命令是数字+YY,比如:
#vi test.c
row1
row2
row3
..........
rown
假如你要复制test.c中的row1到row3行,那就是把光标移动到row1那一行,然后在非输入状态下,先按一下“3”,再按YY,这样就是多行复制了(注:你要复制模轮几行,数字就是多少),以此类推,哗慧举一反三。

‘柒’ Linux复制文件用什么命令怎么用

Linux中最常用命令之一就是cp了,用于复制文件夹或文件。下面由我为大家整理了Linux系统复制文件夹命令cp使用详解,希望对大家有帮助!

Linux系统复制文件夹命令cp使用详解

指令名称:cp()

功能介绍:将一个文件复制至另一个文件,或将数个文件复制至另一目录。

语法格式:

cp [options] source dest

cp [options] source... directory

常用参数说明:

-a 尽可能将档案状态、权限等资料都照原状予以复制。

-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。

-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。

Linux复制文件夹命令cp使用实例

1.将文件aaa 复制(已存在),并命名为bbb:

cp aaa bbb

2.将所有的C语言程序拷贝至 Finished 子目录中 :

cp *.c Finished

3. 复制指定目录的文件到当前目录,并重命名

[root@rehat root]# cp ~/.bashrc bashrc_bak

4. 强制复制指定目录的文件到当前目录,而不管当前目录是否含有该文件

[root@rehat root]# cp -f ~/.bashrc bashrc

5. 复制指定目录到当前目录

[root@rehat root]# cp -r /root/test .

[root@rehat root]# cp -r /root/test/ .

两者效果一样,在复制目录时,会将源路径的最后一级目录全部复制过去,包括它本身。

6. 复制指定目录的文件到指定目录

[root@rehat root]# cp ~/.bashrc /bak/.bashrc

7. 在复制时将源文件的全部属性也复制过来。若不指定参数,则目标文件与源文件属性可能不一致。

[root@rehat root]# cp -a ~/.bashrc /bak/.bashrc

8. 若两个文件夹要保证同步,一个文件的改了,另一个文件也跟着改,但是要保证两个文件的文件都是最新的。

[root@rehat root]# cp -u /src/.bashrc /bak_src/bashrc

(7)linux文件拷贝c语言扩展阅读:linux scp命令远程复制文件夹

1、拷贝本机/home/administrator/test整个目录至远程主机192.168.1.100的/root目录下

复制代码代码如下:

scp -r /home/administrator/test/ [email protected]:/root/

2、拷贝单个文件至远程主机

复制代码代码如下:

scp /home/administrator/Desktop/old/driver/test/test.txt [email protected]:/root/

其实上传文件和文件夹区别就在参数 -r, 跟cp, rm的参数使用差不多, 文加价多个 -r

3、远程文件/文件夹下载

举例,把192.168.62.10上面的/root/文件夹,下载到本地的/home/administrator/Desktop/new/下,使用远程端的root登陆

复制代码代码如下:

scp -r [email protected]:/root/ /home/administrator/Desktop/new/

热点内容
猫咪国外访问 发布:2024-11-26 09:32:05 浏览:617
威立信监控原始密码是多少 发布:2024-11-26 09:24:06 浏览:488
超凡先锋选择不了服务器该怎么办 发布:2024-11-26 09:15:56 浏览:337
搭建ff服务器喝茶 发布:2024-11-26 09:10:09 浏览:846
乐山云服务器公司 发布:2024-11-26 08:59:44 浏览:954
ftp工具可以上传吗 发布:2024-11-26 08:55:04 浏览:570
压缩量密封 发布:2024-11-26 08:52:10 浏览:582
java把一个list 发布:2024-11-26 08:38:38 浏览:586
混沌珠算法 发布:2024-11-26 08:29:17 浏览:164
阿里云解析不到服务器 发布:2024-11-26 07:57:59 浏览:493