我編寫了這個代碼來覆蓋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