这里是新手!
cat
我下面的程序试图在 Linux 中表现得像(一点)命令。
如果没有提供参数,那么它会从用户那里获取输入并在屏幕上打印。(对于一个非常简单的场景,输入缓冲区假定为 10)..
如果我传递多个参数它正在工作..即它正在一一显示不同文件的内容 - 如编程..
--现在的重点是,当我在 shell 上发出命令时,例如:
./mycat abc.txt > 测试
mycat
我的程序名称在哪里,abc.txt
是必需的文件,我将它重定向到一个新的文件测试。我无法理解的奇怪部分是,在重定向之后,如果我查看文件测试,它首先显示文件中的数据,abc.txt
然后是我在 c 程序中的 printf 函数,而不是显示 printfs,然后是数据。这是什么原因?
int main(int argc,char *argv[])
{
char buf[10];
int x,read_bytes,i,fd;
read_bytes=1;
char read_buf[1024*1024];
for(i=0;i<argc;i++)
printf("you entered %s\n",argv[i]); //this printf
switch(argc)
{
case 1:
x=read(0,buf,sizeof(buf));
write(1,buf,x);
break;
default:
for(i=1;i<argc;i++)
{
printf("showing the %dth file\n\n",i);
fd=open(argv[i], O_RDONLY);
if(fd==-1)
{
perror("no file opened for such name");
exit(1);
}
while(read_bytes!=0)
{
read_bytes=read(fd,read_buf,sizeof(read_buf));
if(read_bytes==-1)
{
perror("not able to read\n");
exit(2);
}
write(1,read_buf,read_bytes);
}
read_bytes=1;
close(fd);
}
break;
}
return 0;
}