當前位置:首頁 » 編程語言 » 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 07:57:59 瀏覽:493
python矩陣的行數 發布:2024-11-26 07:56:25 瀏覽:355
街頭籃球手游腳本 發布:2024-11-26 07:51:18 瀏覽:752
閃迪加密器 發布:2024-11-26 07:44:08 瀏覽:553
我的世界伺服器顯示村民名字 發布:2024-11-26 07:37:16 瀏覽:479
php注冊與登錄 發布:2024-11-26 07:31:21 瀏覽:796
基金賬戶如何配置 發布:2024-11-26 07:29:58 瀏覽:181
用電腦怎麼刷汽車行車電腦配置 發布:2024-11-26 07:24:14 瀏覽:689
客戶端ip和伺服器ip地址怎麼設置 發布:2024-11-26 07:18:25 瀏覽:685
如何破解加密的wmv 發布:2024-11-26 07:18:16 瀏覽:896