當前位置:ag真人国际官网-ag旗舰厅官方网站 » 編程語言 » linux文件拷貝c語言

linux文件拷貝c語言-ag真人国际官网

發布時間: 2024-07-16 12:10:22

『壹』 linux中cp命令如何用 c語言實現

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

2,可以參考cp的源碼去了解其原理

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

4,或者下載busybox其中也會有cp的源碼

只有了解其原理之後才能談如何實現。參考代碼如下:

#include
#include
#include
#include
#include
#include
#include
#include

#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

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
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
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/

熱點內容
matlab命令窗口和新建腳本 發布:2024-07-17 15:51:26 瀏覽:374
建ftp文件夾 發布:2024-07-17 15:51:26 瀏覽:954
魔獸撿物腳本 發布:2024-07-17 15:27:56 瀏覽:129
開發ip伺服器 發布:2024-07-17 15:24:42 瀏覽:387
安卓系統視頻製作哪個好用 發布:2024-07-17 15:10:47 瀏覽:210
androidapk結構 發布:2024-07-17 15:10:43 瀏覽:945
c語言指針的例子 發布:2024-07-17 15:08:01 瀏覽:768
linuxzcat 發布:2024-07-17 15:02:09 瀏覽:901
賓士編程嗎 發布:2024-07-17 14:57:08 瀏覽:853
硬碟加密硬體 發布:2024-07-17 14:51:05 瀏覽:836
网站地图