构建 Linux cp 命令的版本
Building a version of the Linux cp command
你好,我正在尝试用 C 构建一个 linux cp 命令的版本,它可以处理以下测试用例
- cpy f1 f2 - 将 f1 的内容复制到 f2
- cpy f d - 将 f 复制到 d/f
- cpy d1/d2/d3/f1 f2 - 将 f1 的内容复制到 f2
- cpy d1/d2/d3/f d - 将 f 复制到 d/f
- cpy d1/d2/d3/f d4/d5/d6/f d - 将文件复制到目录 d
我已经获得了 Copyfile 函数的代码,我想做的就是创建我的主要函数来调用 Copyfile 并验证测试用例是否得到正确处理。这是 CopyFile 函数和 main 函数。我在正确的轨道上吗?我无法测试,因为我目前在编译时有错误(error:confilcting Copyfile 的类型)而且我似乎无法弄清楚出了什么问题。
int copyFiles(int argC, char* argV[]){
int srcFd;
int dstFd;
int charCnt;
int buffersize = strtol(argV[3], NULL, 10);
char buf[buffersize];
/*Check args*/
if( argC!=4 ){
fprintf( stderr, "usage: %s source destination\n", argV[0]);
exit(1);
}
/*Open the files*/
srcFd= open(argV[1],O_RDONLY);
if( srcFd==-1 ){
errExit("Cannot open ", argV[1]);
}
dstFd= creat(argV[2],COPYMODE);
if( dstFd==-1 ){
errExit( "Cannot create ", argV[2]);
}
/*Copy the data*/
while( (charCnt= read(srcFd,buf,buffersize)) > 0 ){
if( write(dstFd,buf,charCnt ) != charCnt ){
errExit("Write error to ", argV[2]);
}
}
if( charCnt==-1 ){
errExit("Read error from ", argV[1]);
}
/*Close files*/
if ( close(srcFd) == -1 || close(dstFd) == -1 ){
errExit("Error closing files","");
}
}
int copyFiles(char *srcFd,char *dstFd);
int main(int argC, char* argV[])
{
char *srcFd = argV[1];
char *dstFd = argV[2];
if( srcFd[0] != '/' && dstFd[0] != '/' )//cpy f1 f2
{
copyFiles(srcFd, dstFd);
}
else if( srcFd[0] != '/' && dstFd[0] == '/' )//cpy f1 /d
{
int i;
for(i=1; i<=strlen(dstFd); i++)
{
dstFd[(i-1)] = dstFd[i];
}
strcat(dstFd, "/");
strcat(dstFd, srcFd);
copyFiles(srcFd, dstFd);
}
else
{
fprintf(stderr, "usage: cp1 source destination\n");
exit(1);
}
}
您已将参数定义为 int 和 char* 的函数
int copyFiles(int argC, char* argV[])
但在主程序中声明为 char* 和 char*
int copyFiles(char *srcFd,char *dstFd);
C 不接受,因此存在冲突。这就是它显示错误的原因。
你好,我正在尝试用 C 构建一个 linux cp 命令的版本,它可以处理以下测试用例
- cpy f1 f2 - 将 f1 的内容复制到 f2
- cpy f d - 将 f 复制到 d/f
- cpy d1/d2/d3/f1 f2 - 将 f1 的内容复制到 f2
- cpy d1/d2/d3/f d - 将 f 复制到 d/f
- cpy d1/d2/d3/f d4/d5/d6/f d - 将文件复制到目录 d
我已经获得了 Copyfile 函数的代码,我想做的就是创建我的主要函数来调用 Copyfile 并验证测试用例是否得到正确处理。这是 CopyFile 函数和 main 函数。我在正确的轨道上吗?我无法测试,因为我目前在编译时有错误(error:confilcting Copyfile 的类型)而且我似乎无法弄清楚出了什么问题。
int copyFiles(int argC, char* argV[]){
int srcFd;
int dstFd;
int charCnt;
int buffersize = strtol(argV[3], NULL, 10);
char buf[buffersize];
/*Check args*/
if( argC!=4 ){
fprintf( stderr, "usage: %s source destination\n", argV[0]);
exit(1);
}
/*Open the files*/
srcFd= open(argV[1],O_RDONLY);
if( srcFd==-1 ){
errExit("Cannot open ", argV[1]);
}
dstFd= creat(argV[2],COPYMODE);
if( dstFd==-1 ){
errExit( "Cannot create ", argV[2]);
}
/*Copy the data*/
while( (charCnt= read(srcFd,buf,buffersize)) > 0 ){
if( write(dstFd,buf,charCnt ) != charCnt ){
errExit("Write error to ", argV[2]);
}
}
if( charCnt==-1 ){
errExit("Read error from ", argV[1]);
}
/*Close files*/
if ( close(srcFd) == -1 || close(dstFd) == -1 ){
errExit("Error closing files","");
}
}
int copyFiles(char *srcFd,char *dstFd);
int main(int argC, char* argV[])
{
char *srcFd = argV[1];
char *dstFd = argV[2];
if( srcFd[0] != '/' && dstFd[0] != '/' )//cpy f1 f2
{
copyFiles(srcFd, dstFd);
}
else if( srcFd[0] != '/' && dstFd[0] == '/' )//cpy f1 /d
{
int i;
for(i=1; i<=strlen(dstFd); i++)
{
dstFd[(i-1)] = dstFd[i];
}
strcat(dstFd, "/");
strcat(dstFd, srcFd);
copyFiles(srcFd, dstFd);
}
else
{
fprintf(stderr, "usage: cp1 source destination\n");
exit(1);
}
}
您已将参数定义为 int 和 char* 的函数
int copyFiles(int argC, char* argV[])
但在主程序中声明为 char* 和 char*
int copyFiles(char *srcFd,char *dstFd);
C 不接受,因此存在冲突。这就是它显示错误的原因。