當前位置:首頁 » 編程語言 » c語言cp

c語言cp

發布時間: 2022-04-25 04:56:05

㈠ 基於c語言的簡單cp命令實現

main函數的參數,就是命令執行時,傳給程序的參數,一般兩個,一個是整數,表示傳入參數的個數,一個是字元串數組,傳入的參數,都是字元串,命令行輸入時用空格分隔。
可以用system(ls)命令,生成目錄名稱,突出到文件,通過字元處理,查看文件屬性,對於目錄,執行下一級cp,對於一般文件,按二進制文件讀寫復制。

㈡ 有用c語言程序實現系統的cp命令的代碼么,求幫助

linux系統下的CP命令的源代碼是包含在coreutils里的。

或者使用rpm的源碼包,我們可以輸入命令:whereis cp

找到cp所在的路徑

rpm -qf /bin/cp

使用rpm的qf參數能夠查到某個文件屬於哪個rpm包

我的機子的結果:coreutils-5.2.1-31.6

然後再到rpmfind.net中找coreutils的src.rpm源碼.

rpm -ql -p /path/to/coreutils-5.2.1-31.src.rpm

rpm -ivh coreutils-5.2.1-31.src.rpm

然後在/usr/src/RedHat/SOURCES/(這個目錄的名稱不一定,取決於你裝的是什麼系統)就可以找到相應的源代碼了。

舉一反三,可以找到其他命令的源代碼。

另外,Ubuntu中可以用apt-get -d source "coreutils" 這條命令來下載源代碼,很方便。

㈢ C語言中的指針表達式,請大家根據圖詳細講下,謝謝

先教你一個區分左值和右值的方法:
你可以試著對表達式進行取址操作,如果表達式不能進行取址的話,那麼就可以看做右值。如果可以取址,就有可能是左值也有可能是右值。
舉個例子
int
a
=
0;
這里對a進行取址操作,&a,是合法的,所以a可以是左值也可以是右值;
再來,&0,這樣肯定不行的,所以0是個右值。同樣的像"a"、a+b這類的都屬於右值。
然後說你發的圖:
第一個圖:cp是個指向char的指針。
char
c
=
'a';
char
*cp
=
&c;
圖一簡單描述如上,首先他是一個指針,他指向的內存里放的是char型的『a』。
那麼按照我給你的技巧試一下,對cp進行取址操作,即&cp,這是合法的,也就是說cp可能是左值也可能是右值。
cp是左值的例子:char
temp
=
'd';
cp
=
&temp;
//這里cp是左值(圖一的右邊)
cp是右值的例子:char
*cp2
=
cp;
//這里cp是右值(圖一左邊)
第二張圖:&cp,還是按照我給你的方法,&(&cp)這是不合法的,所以&cp只能當做右值。
&cp做右值的例子:char
**cpp
=
&cp;
//這里實際上是用一個臨時的地址存放了&cp的值並附給cpp。
從上面的例子可以看出&cp實際上是臨時的一個值,你並不知道他的內存地址,所以不能給他賦值,也就是不能把&cp當左值。
第三張圖還是用那方法。&(*cp)是合法的所以可以是左值也可以是右值。
左值例子:*cp
=
's';
//圖三右邊;
右值例子:char
s
=
*cp;
//圖三左邊;
第四張圖:&(*cp+1)是不合法的。所以*cp+1隻能是右值;
右值例子:int
n
=
(int)(*cp+1);
//這里跟第二張圖情況一樣,實際上*cp+1的結果是個臨時的值,所以不能對這個臨時的值進行賦值,也就是說他不可以當左值。

㈣ Linux中我用C語言創造一個CP文件,要./cp才可以運行,怎麼才可以直接cp就運行C語言文件而不是cp命令

修改環境變數PATH,加上當前目錄「.」
export PATH=$PATH:.
或者使用別名:alias cp=/dir/cp

㈤ c語言修仙祁雲和常寂是cp嗎

c語言修仙祁雲和常寂不是cp。

《C語言修仙》是一部由一十四洲寫的已完結耽美小說。

作品文案

林潯是一個程序員,通宵編代碼後發現自己身體內多了一個程序輸入窗口。他嘗試編了一個循環程序。第二天,鄰居家老頭找上門來:小潯,你小小年紀,竟已跨入煉氣期,做我門下弟子如何?

第三天,在街上被人拍肩膀:少年,你骨骼驚奇,加入我宗門如何?林潯:???後來,他發現現代社會真的有修仙者。而別人修仙靠靈力,自己修仙靠編程,還能看見別的修仙者體內的程序。

某元嬰大佬:豎子!你怎能窺破我劍招的破綻?

林潯淡定收劍:你程序有bug。

某渡劫大神:我不甘心!你這招叫什麼?

林潯扶眼鏡:蒙特卡洛演算法

然後,他就這樣漸漸成了修真界的傳說。

㈥ C語言,怎麼想到數量關系式的

這里不過是循環嵌套。

14行:既然表達式中用到B[m][n]。而B數組定義時int B[3][3],n在循環中最大不超過2。所以循環中n初值0,循環條件就是n<3。否則數據訪問越界。

16行:循環累加,n+i對應的是A[m][n+i](int A[3][16]}),同理要確保數組不能訪問越界,n+i最大不超過15,而循環中n取值0~2,i取值0~13,n+i剛好在區間內。

至於為什麼這么寫,全看運算需求,單獨看代碼沒有意義。同一種運算要求還有多種方法。

PS:這個代碼中int C[1][14],只有1行,沒必要定義成二維數組,直接定義一維數組int C[14]即可。另外注意C[0][i]/16,除號兩邊是整數,是整除。小數不保留。

可以不用i,來實現滑動,比如使用指針數組來執行A對應B的區間:

下面代碼fun1是你書本代碼,fun2是我另寫得指針方法,對比可以實現同樣效果。(演示數值我就不按照書本上輸入了,你想一樣自己改A的值)。

#include <stdio.h>

int A[3][16]={{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},

{17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32},

{33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48}};

int B[3][3]={{1,2,1},{2,4,2},{1,2,1}};

int c[1][14]={};

void fun1();

void fun2();

int main()

{

printf("用書本方法: ");

fun1();

printf(" ");

printf("用指針方法: ");

fun2();

return 0;

}

void fun2()

{

int m,n,*p[3][3]={},*cp=NULL;//A對應B的矩陣區間,用指針數組表示

p[0][0]=&A[0][0];

cp=&c[0][0];

while(1)

{

for(m=1;m<3;m++) p[m][0]=p[0][0]+16*m;

for(m=0;m<3;m++)

for(n=1;n<3;n++)

p[m][n]=p[m][0]+n;

for(m=0,*cp=0;m<3;m++)

for(n=0;n<3;n++)

*cp+=*(p[m][n])*B[m][n];

*cp=*cp/16;

printf("%5d",*cp);

if(p[0][0]==&A[0][13])

break;

(p[0][0])++;

cp++;

}

}

void fun1()

{

int i,m,n;

for(i=0;i<14;i++)

{

for(m=0;m<3;m++)

{

for(n=0;n<3;n++)

c[0][i]+=A[m][n+i]*B[m][n];

}

c[0][i]=c[0][i]/16;

printf("%5d",c[0][i]);

}

}

㈦ c語言中cp是什麼意思

cp在c語言中沒有特別的含義
在linux系統中,它是一個命令行程序,作用是文件

㈧ C語言實現CP指令

用C實現的步驟是:
1、解析命令,就是提取出源路徑和目標路徑,以及文件名。
2、寫一個切換目錄的函數,比如chgdir(char *),路徑名字做參數。
3、執行切換目錄函數,正確執行後,在這個目錄下找到目標文件,定義一個緩沖區,把文件內容拷貝進去,找不到文件另作處理。
4、再調用2步驟中的目錄切換函數,在目標路徑下建立一個空文件並把緩沖區內容寫進去,保存。

㈨ 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;
}
熱點內容
python判斷字元串是否為空 發布:2025-07-16 00:21:47 瀏覽:209
安卓轉蘋果用什麼軟體 發布:2025-07-16 00:21:45 瀏覽:627
安卓官服如何登ios 發布:2025-07-16 00:21:32 瀏覽:623
天龍搶店腳本 發布:2025-07-16 00:14:47 瀏覽:957
華為榮耀存儲卡 發布:2025-07-16 00:10:40 瀏覽:658
mysql創建utf8資料庫 發布:2025-07-16 00:04:08 瀏覽:104
開機系統用戶名密碼多少 發布:2025-07-16 00:03:58 瀏覽:692
成都高品質安全存儲櫃 發布:2025-07-15 23:45:38 瀏覽:55
頁面演算法操作系統 發布:2025-07-15 23:35:30 瀏覽:129
程序加密專家 發布:2025-07-15 23:28:13 瀏覽:486