当前位置:首页 » 编程语言 » 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;
}
热点内容
百度扩容脚本 发布:2025-07-16 10:02:29 浏览:46
sqllike字段 发布:2025-07-16 09:58:53 浏览:145
爱肤密码多少钱 发布:2025-07-16 09:52:51 浏览:616
如何访问电脑工作组 发布:2025-07-16 09:39:24 浏览:183
动态优先权算法 发布:2025-07-16 09:39:02 浏览:201
火车wifi密码是多少啊 发布:2025-07-16 09:35:46 浏览:756
sql的视图是从中导出的 发布:2025-07-16 09:31:34 浏览:784
安卓如何打开shell窗口 发布:2025-07-16 09:28:09 浏览:313
华为荣耀备忘录文件夹 发布:2025-07-16 09:23:23 浏览:972
基于特征匹配算法 发布:2025-07-16 09:18:23 浏览:46