微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > mini2440串口测试程序中stdout和stderr不懂,求大侠讲解下。。。

mini2440串口测试程序中stdout和stderr不懂,求大侠讲解下。。。

时间:10-02 整理:3721RD 点击:
主要是这两段程序不懂,那个stdout和stderr不懂。
void OutputStdChar(FILE *File) {//向设备写数据,打开一个串口,声明并且定义该函数
            char Buffer[10];
            int Len = sprintf(Buffer, OutputHex ? "%.2X  " : "%c", Char);//将char中数据写到buff中
            fwrite(Buffer, 1, Len, File);//将 buffer 中的数据写入到file中去,写入的 len个字符数
                                                                        }

if (FD_ISSET(CommFd, &ReadSetFD)) {//判断串口是否可读
            while (read(CommFd, &Char, 1) == 1) {//从串口中读取一个值
                WaitFdWriteable(TtyFd);//等待终端可写
                if (write(TtyFd, &Char, 1) < 0) {
                      Error(strerror(errno));
                                                                                }
                if (OutputToStdout) {
                    if (UseColor)
                        fwrite("\x1b[01;34m", 1, 8, stdout);
                    OutputStdChar(stdout);//向设备写数据,stdout标准输出,默认是终端
                    if (UseColor)
                        fwrite("\x1b[00m", 1, 8, stdout);
                    fflush(stdout);
                }
            }
        }
        if (FD_ISSET(TtyFd, &ReadSetFD)) {//判断终端是否可读
            while (read(TtyFd, &Char, 1) == 1) {
                       static int EscKeyCount = 0;
                WaitFdWriteable(CommFd);
                       if (write(CommFd, &Char, 1) < 0) {
                      Error(strerror(errno));
                }
                if (OutputToStdout) {
                    if (UseColor)
                        fwrite("\x1b[01;31m", 1, 8, stderr);//标准输出(设备)文件,对应终端的屏幕
                    OutputStdChar(stderr);//?
                    if (UseColor)
                        fwrite("\x1b[00m", 1, 8, stderr);
                    fflush(stderr);
                }

stdout、stdin、stderr是C提供的标准文件,对应显示器、键盘,显示器;
描述为标准输出,标准输入,标准错误输出;
这些设备都可以重定向到其他设备或文件。

那这句是什么意思呢?fwrite("\x1b[01;31m", 1, 8, stderr);

stdout是标准输出  有缓存 遇到\n 或缓存满 或遇到输入函数 答应到屏幕
stderr是标准出错  没缓存 直接打印到屏幕
fwrite("\x1b[01;31m", 1, 8, stderr) 中 的字符串估计是一种控制台编码 比如改变输出字符颜色。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top