Linux下C語言實現文件拷貝
/*
Function: file from file1 to file2
How to execute: ./file file1 file2 (under Linux)
Data:2007-05-09
*/
#include <stdio.h> /*fprintf(),stderr,BUFSIZ*/
#include <stdlib.h> /**/
#include <string.h> /*stderror()*/
#include <fcntl.h> /*open(),flag*/
#include <errno.h> /*errno*/
#include <unistd.h> /*ssize_t*/
#include <sys/types.h>
#include <sys/stat.h> /*mode_t*/
#define BUFFER_SIZE 3
int main(int argc,char **argv)
{
int from_fd,to_fd;
int bytes_read,bytes_write;
char buffer[BUFFER_SIZE];
char *ptr;
if(argc!=3)
{
fprintf(stderr,"Usage:%s fromfile tofile\n\a",argv[0]);
exit(1);
}
/* 打開源文件 */
if((from_fd=open(argv[1],O_RDONLY))==-1) /*open file readonly,返回-1表示出錯,否則返迴文件描述符*/
{
fprintf(stderr,"Open %s Error:%s\n",argv[1],strerror(errno));
exit(1);
}
/* 創建目的文件 */
/* 使用了O_CREAT選項-創建文件,open()函數需要第3個參數,
mode=S_IRUSR|S_IWUSR表示S_IRUSR 用戶可以讀 S_IWUSR 用戶可以寫*/
if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
{
fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));
exit(1);
}
/* 以下代碼是一個經典的拷貝文件的代碼 */
while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
{
/* 一個致命的錯誤發生了 */
if((bytes_read==-1)&&(errno!=EINTR))
break;
else if(bytes_read>0)
{
ptr=buffer;
while(bytes_write=write(to_fd,ptr,bytes_read))
{
/* 一個致命錯誤發生了 */
if((bytes_write==-1)&&(errno!=EINTR))
break;
/* 寫完了所有讀的位元組 */
else if(bytes_write==bytes_read)
break;
/* 只寫了一部分,繼續寫 */
else if(bytes_write>0)
{
ptr+=bytes_write;
bytes_read-=bytes_write;
}
}
/* 寫的時候發生的致命錯誤 */
if(bytes_write==-1)
break;
}
}
close(from_fd);
close(to_fd);
return;
}
⑵ 求linux下復制文件到其他目錄的c語言庫函數
這個不知道有沒有,可以使用system函數執行shell命令復制
如:system("cp /home/file1 /root/file2");
另外樓上們說的fread、fwrite等函數都可能因為迴文件太大無法在內存答展開而失敗。
⑶ C語言,如何復制文件
調用系統函數是以字元串方式保存的,而非二進制。(因為dos\linux命令行下二進制編碼無專意義)
所以system()一定不滿足你的要屬求。
可以使用c的IO函數達到你想要的目的
以下是簡要說明,不考慮出錯等問題:
所有IO函數包含在stdio.h中(linuxC是,turboc應該也是吧,忘了)
1、定義源文件和目標文件指針FILE *fp_source,*fp_target
2、聲明一個程序內數據存放區如char buffer[100],或調用malloc函數
3、用fp_source = fopen()打開源文件文件
4、用fp_target = fopen()打開目標文件
5、
while(feof(fp_source) == 0)//利用循環復制直到源文件尾
{用fread()將源文件內容讀入程序buffer
用fwrite()將buffer內容寫入目標文件
}
6、別忘了close()關閉源\目標文件
7、各函數使用方法請自行查詢,不贅述。
沒有寫全源碼,但希望這條思路對你有幫助。
⑷ linux中的復制粘貼快捷鍵
Linux下復制粘貼快捷鍵
1. 在控制台下:
1.1、滑鼠選中要復制的文本,按滑鼠中鍵,即為復制
或者
1.2、復制命令:Ctrl + Insert 組合鍵或用滑鼠選中即是復制。
粘命令:Shift + Insert 組合鍵或單擊滑鼠滾輪即為粘貼。
2. 在終端下:
復制命令:Ctrl + Shift + C 組合鍵.
粘貼命令:Ctrl + Shift + V 組合鍵.
3. vim或命令行下:
滑鼠左鍵選中即為復制, 按下中鍵(滑鼠滾輪)即為粘貼。
在命令行里,滑鼠左鍵復制,按著左鍵開始選你想要復制的內容(背景是黑的,字是白的,灰色的框就是你選中的內容),然後再把左鍵松開,放到其他地方,點右鍵,松開,這樣就粘貼好了。
⑸ linux下用簡單c語言代碼怎麼實現實現文件夾所有內容的復制
||#include <sys/stat.h>
#include <unistd.h>
// 目錄
int isdir(char *path)
{
struct stat buf;
int cc;
cc=stat(path,&buf);
if(!cc && (buf.st_mode & S_IFDIR)) return(1);
return(cc);
}
// 可讀普通文件
int isrfile(char *path)
{
struct stat buf;
int cc;
int euid,egid;
cc=stat(path,&buf);
if(!cc) {
if((buf.st_mode & S_IFMT) != S_IFREG) return 0;
euid=geteuid();
egid=getegid();
if(euid==0) {
if(buf.st_mode & S_IRUSR || buf.st_mode & S_IRGRP ||
buf.st_mode & S_IROTH)
return 1;
else return 0;
}
if((buf.st_mode & S_IROTH)!=0) return 1;
if((buf.st_gid == egid) && ((buf.st_mode & S_IRGRP)!=0))
return 1;
if((buf.st_uid == euid) && ((buf.st_mode & S_IRUSR)!=0))
return 1;
}
return cc;
} 【江西新華】
⑹ 怎樣用C語言將文件復制另外的文件夾
有兩種方式可以實抄現復制:
一、自襲行編寫函數,實現復制。
演算法流程如下:
1
以讀的方式打開源文件,以寫的方式打開目標文件;
2
每次讀一個位元組,並寫到目標文件中,直到達到文件結尾為止;
3
關閉兩個文件。
二、調用系統命令。
stdlib.h中的system函數,可以執行系統命令行支持的命令。
int
system(char
*cmd);
調用時就是執行cmd中的指令。
1
對於windows,就是執行dos命令,可以調用
system("
/Y
src_file
target_dir");
其中src_file為源文件,而target_dir就是目標文件夾。
2
對於Linux,需要執行shell命令cp,如下
system("cp
src_file
target_dir");
⑺ 如何將linux中的c語言復制出來
文件保存到U盤就可以。也可以通過網路共享。
⑻ 在Linux系統系下vi操作中C語言編程,如何進行復制粘貼求救!
YY可以但是不準確,用起來比較麻煩,用滑鼠選中然後復制就可以了,粘帖的時候也用滑鼠也可以但粘帖我一般是按shift+insert,比較快捷方便,復制就只能用滑鼠了,沒有快捷鍵
⑼ linux如何復制文件
linux系統使用cp命令即可將一個文件夾裡面的文件復制到另外一個文件夾裡面。
這個命令相當於dos下面的命令,具體用法是:cp_r源文件目的文件,其中參數r是指連同源文件中的子目錄一同拷貝。../ 和 ./ 代表的 是上級目錄以及當前目錄。使用時的兩種情況:
1、處在當前目錄復制當前目錄下文件到別的目錄:cp文件名稱別的文件目錄路徑
例如,在orz文件夾下有兩個子文件夾a和b,a中有文件x.c,b中無文件。此時我們在a文件夾中命令如下:cpx.c../b/。
2、處在當前文件夾下復制另外文件夾下的文件到當前文件夾下:cp路徑/文件名稱./例如和上面例子一樣,命令如下:cp../a/x.c./。
(9)linuxc語言文件復制擴展閱讀:
Linux系統復制錯誤文件要刪除的命令:
命令RM是用來刪除文件的,與DOS下的RM(刪除一個空目錄)是不同的,應該注意。對於rm命令有三個常見的參數:-i、-r和-f。例如,您想刪除名為Test:Rm-ITest的文件
系統會問:RM:刪除測試?Y,文件將不會被刪除,直到你按回車。這樣做的原因是Linux沒有像DOS恢復刪除命令,或者你可以使用pcTool和其他工具來保存刪除文件,刪除文件在Linux中不能得救,因此有必要使用這個參數刪除之前讓你再次確認。
⑽ 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
(10)linuxc語言文件復制擴展閱讀: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/