我编写了这个代码来覆盖Ubuntu中的cat
命令。 cat
指令的以下三种格式正常工作,但休息不起作用。C中的标准输入和输出标准输入和输出
工作的:
- ./catf> FILE.TXT
- ./catf < FILE.TXT
不工作:
- ./catf文件1。 txt> File.txt
- ./catf File.txt
我正在向上面列出的程序发送终端参数。另一个问题是每个文件还包含Enter your String:
也是它shouldn't.Here是代码:
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;
}
UPDATE:
我做的代码由威廉建议的修改和的休息代码工作正常,但这./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);
}
上述问题的原因是什么?
查看我更新的问题 – Alfred
更改可执行文件的名称不会以任何重要的方式改变我的答案。唯一的区别是我的例子应该是'./catf'<'filename'。在运行程序方面,现在'* argv [0]'是'catf'而不是'cat',但是'argc'仍然是1,而'* argv [1]'仍然是NULL而不是'<你在你的问题中调用该命令。 –
好的。为什么'Not Working'下列出的那些不起作用? – Alfred