我刚刚看到一个关于在线复制文件的文件,但我不知道如何运行它,我试过" gcc -o a.c"创建一个程序,然后当我输入" ./ a"它说"用法:./源目的地"作为错误。我该怎么办?
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
#define BUFFERSIZE 4096
#define COPYMODE 0644
void oops(char *, char *);
void copy_file(char *, char *);
void copy(char *, char *);
int main(int ac, char *av[]) {
if (ac != 3) {
fprintf(stderr, "usage: %s source destination\n", *av);
exit(1);
}
copy(av[1], av[2]);
return 0;
}
void oops(char *s1, char *s2) {
fprintf(stderr, "Error: %s ", s1);
perror(s2);
exit(1);
}
void copy_file(char *file1, char *file2)
{
int in_fd, out_fd, n_chars;
char buf[BUFFERSIZE];
struct stat in_stat, out_stat;
检查是否存在两个文件
if (stat(file1, &in_stat) == 0 && stat(file2, &out_stat) == 0)
{
//Check if two files are same
if (in_stat.st_ino == out_stat.st_ino)
{
//if same, do nothing
return;
}
}
if ( (in_fd=open(file1, O_RDONLY)) == -1 )
oops("Cannot open ", file1);
if ( (out_fd=creat( file2, COPYMODE)) == -1 )
oops( "Cannot creat", file2);
while ( (n_chars = read(in_fd , buf, BUFFERSIZE)) > 0 )
if ( write( out_fd, buf, n_chars ) != n_chars )
oops("Write error to ", file2);
if ( n_chars == -1 )
oops("Read error from ", file1);
if ( close(in_fd) == -1 || close(out_fd) == -1 )
oops("Error closing files","");
if (chmod(file2, in_stat.st_mode) != 0) {
oops("Error change file mode", "");
}
}
void copy(char *file1, char *file2)
{
struct stat in_stat, out_stat;
struct dirent *direntp;
DIR *dir_ptr;
if (stat(file1, &in_stat) != 0)
{
oops("File not exist", "");
}
if (S_ISDIR(in_stat.st_mode))
{
if (stat(file2, &out_stat) != 0)
{
if (mkdir(file2, in_stat.st_mode) != 0)
{
oops("Failed to create directory", "");
}
}
if ((dir_ptr = opendir(file1)) == NULL)
{
oops("Failed to open directory", "");
} else {
while ((direntp = readdir(dir_ptr)) != NULL)
{
if (strcmp(direntp->d_name, ".") && strcmp(direntp->d_name, ".."))
{
char *new_file1 = (char *)malloc(strlen(file1)+strlen(direntp->d_name)+2);
strcpy(new_file1, file1);
strcat(new_file1, "/");
strcat(new_file1, direntp->d_name);
char *new_file2 = (char *)malloc(strlen(file2)+strlen(direntp->d_name)+2);
strcpy(new_file2, file2);
strcat(new_file2, "/");
strcat(new_file2, direntp->d_name);
copy(new_file1, new_file2);
free(new_file1);
free(new_file2);
}
}
closedir(dir_ptr);
}
}else {
copy_file(file1, file2);
}
}
我还尝试在&#34; ./ a&#34;之后添加路径名。但仍然没有工作 对不起,我是c语言的新手
答案 0 :(得分:0)
你的代码想要在“。\ a”后面加2个参数,它们是2个文本文件路径。添加此参数后,您可以运行代码而不会显示错误消息。
用法:
“。\ a -filepath1 -filepath2”
答案 1 :(得分:0)
看一下main
的前几行。
int main(int ac, char *av[]) {
if (ac != 3) {
fprintf(stderr, "usage: %s source destination\n", *av);
exit(1);
}
main
的第一个参数ac
是参数的数量。当ac
不等于三个时,您有代码打印错误消息,然后退出。
使用时
./a
程序的参数数量是1,只是程序本身。
您的程序似乎希望源文件和目标文件正常工作。您需要在命令行中提供它们。
./a file-1 file-2
其中file-1
是源文件,file-2
是目标文件。