加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

不了解stdout语义

发布时间:2020-12-16 09:39:41 所属栏目:百科 来源:网络整理
导读:这里有新手! 我下面的程序试图在Linux中扮演(一点点)cat命令. 如果没有提供参数,则它从用户获取输入并在屏幕上打印.(对于非常简单的场景,假设输入缓冲区为10). 如果我传递多个参数它正在工作……即.它逐个显示不同文件的内容 – 编程.. – 现在重点是,当我
这里有新手!

我下面的程序试图在Linux中扮演(一点点)cat命令.

>如果没有提供参数,则它从用户获取输入并在屏幕上打印.(对于非常简单的场景,假设输入缓冲区为10).
>如果我传递多个参数它正在工作……即.它逐个显示不同文件的内容 – 编程..

– 现在重点是,当我在shell上发出命令时:

./mycat abc.txt > test

其中mycat是我的程序名称,abc.txt是必需的文件,我将其重定向到新的文件测试.
我无法理解的奇怪的部分是,重定向后,如果我查看文件测试,它首先显示文件abc.txt中的数据然后我的printf函数在c程序中显示而不是显示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  %sn",argv[i]); //this printf

    switch(argc)
    {
    case 1:
         x=read(0,buf,sizeof(buf));
         write(1,x);
         break;

    default:
         for(i=1;i<argc;i++)
         {
             printf("showing the %dth filenn",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 readn");
                     exit(2);
                 }
                 write(1,read_bytes);
             }
             read_bytes=1;
             close(fd);
         }
         break;
     }

     return 0;
}

解决方法

printf还打印到stdout,其文件描述符为1,因此您将printf行写入与文件内容相同的输出.

您可能更喜欢将诊断写入单独的输出,例如stderr:

fprintf(stderr,"Hello world.n");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读