我编写了这段代码来覆盖cat
Ubuntu 中的命令。以下三种cat
指令格式可以正常工作,但其余的不能正常工作。
工作人员:
- ./catf > 文件.txt
- ./catf < 文件.txt
不工作:
- ./catf 文件 1.txt > 文件.txt
- ./catf 文件.txt
我正在将终端参数发送到上面列出的程序。另一个问题是每个文件还包含Enter your String:
它不应该包含的内容。这是代码:
int main(int argc, char *argv[])
{
int readbytes,fp;
char buf[1024];
if(argc==1)
{
printf("Enter your String :\n\n");
readbytes=read(STDIN_FILENO,buf,1024);
write(STDOUT_FILENO,buf,readbytes);
}
else if(argc==2)
{
fp=open(argv[1],O_RDONLY);
dup2(0,fp);
close(fp);
readbytes=read(STDIN_FILENO,buf,1024);
write(STDOUT_FILENO,buf,readbytes);
}
else if(argc==3)
{
if(argv[1][0]=='<')
{
fp=open(argv[2],O_WRONLY|O_CREAT,S_IRWXU);
dup2(1,fp);
close(fp);
readbytes=read(STDIN_FILENO,buf,1024);
write(STDOUT_FILENO,buf,readbytes);
}
else if(argv[1][0]=='>')
{
fp=open(argv[2],O_RDONLY);
dup2(1,fp);
close(fp);
readbytes=read(STDIN_FILENO,buf,1024);
write(STDOUT_FILENO,buf,readbytes);
}
}
else if(argc==4)
{
printf("inside");
fp=open(argv[1],O_RDONLY);
dup2(0,fp);
close(fp);
fp=open(argv[3],O_WRONLY|O_CREAT,S_IRWXU);
dup2(1,fp);
close(fp);
readbytes=read(STDIN_FILENO,buf,1024);
printf("%c",buf);
write(STDOUT_FILENO,buf,readbytes);
}
return 0;
}
更新:
我在代码中进行了威廉建议的更改,其余代码工作正常,但这./catf File.txt ">" File2.txt
仍然不起作用。这是为什么?
if(argc==4)
{
printf("inside4");
fp=open(argv[1],O_RDONLY);
dup2(fp,0);
close(fp);
fp=open(argv[3],O_WRONLY|O_CREAT|O_TRUNC,S_IRWXU);
dup2(fp,1);
close(fp);
readbytes=read(STDIN_FILENO,buf,1024);
//printf("%c",buf);
write(STDOUT_FILENO,buf,readbytes);
}
出现上述问题的原因是什么?