我想在UNIX中制作复制功能文件

时间:2019-04-28 11:02:34

标签: c linux shell copy

当我输入“ ./test test.c / home / user1 / Desktop /”时,它没有任何作用。

我想将文件从(now_path)复制到(other_path)。

但是,我不知道为什么它不起作用,我认为这是完美的代码。它有错误还是需要更多其他代码?

char ch;
int src, dst;

if( argc != 3 )                                               
{
    printf("argument error\n");
    printf("usage: ./a.out src dest\n");
}
src = open( argv[1], O_RDONLY );                                         
dst = open( argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644 );           

while( read( src, &ch, 1 ))
    write( dst, &ch, 1 );

close( src );
close( dst );
return 0;

2 个答案:

答案 0 :(得分:1)

除非您开始检查返回值,否则无法弄清楚。 open函数在失败时返回负值,并且errno设置为指示出了什么问题。

readwrite相同。它们返回读取/写入的字节数以及失败时的负值。这些功能还可以设置errno

您可以使用如下构造:

if ((src = open( argv[1], O_RDONLY )) < 0) {
    fprintf(stderr, "Error accessing source file.\n");
    fprintf(stderr, "errno: %s\n", strerror(errno));
    exit(EXIT_FAILURE);
}

答案 1 :(得分:0)

您的代码还可以,但是您可能想要在尝试复制源文件的内容之前确保其可读性。另外,如果发生错误,您可能想终止程序。

char ch;
int src, dst;

if( argc != 3 )                                               
{
    printf("argument error\n");
    printf("usage: ./a.out src dest\n");
    exit(1); // Terminate the program
}

if ((src = open( argv[1], O_RDONLY )) == -1)
{
    printf("Error accessing source file.\n");
    exit(1);
}                             

if (dst = open( argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644 )) == -1)
{
    printf("Error accessing destination file.\n");
    exit(1);
}           

while( read( src, &ch, 1 ) > 0 )
    write( dst, &ch, 1 );

close( src );
close( dst );

return 0;

此外,如果第二个参数始终是目录,则需要将目标文件的open命令设置为第二个和第一个参数的组合(argv[2]与{ {1}}。

为此,您可以使用argv[1]函数,将第二个字符串的内容复制到第一个字符串中。首先将strcat添加到程序的标题中:

#include <string.h>