当我输入“ ./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;
答案 0 :(得分:1)
除非您开始检查返回值,否则无法弄清楚。 open
函数在失败时返回负值,并且errno
设置为指示出了什么问题。
read
和write
相同。它们返回读取/写入的字节数以及失败时的负值。这些功能还可以设置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>