Articles of stdout

一个进程如何拦截Linux上另一个进程的stdout和stderr?

我有一些脚本应该停止运行,但永远不会停下来。 有什么方法可以找出他们正在写入标准输出和标准错误以可读的方式吗? 例如,我试图做 tail -f /proc/(pid)/fd/1 但那不是真的有用。 无论如何,这是一个长镜头。 任何其他的想法? 因为看到这一点,它本身是非常冗长和不可读的。 注意:我只对他们的输出感兴趣,而不是其他任何东西。 我有能力自己搞清楚其他的事情。 这个问题只关注在启动后访问正在运行的进程的stdout和stderr。

打印STDOUT / STDERR并将它们写入Bash中的文件?

有没有办法让Bash将STDOUT / STDERRredirect到一个文件,但仍然打印到terminal?

禁用stdout和stderr缓冲是否安全?

有时我们用这种方法在代码中放置一些debugging打印件 printf("successfully reached at debug-point 1\n"); some code is here printf("successfully reached at debug-point 2"); Here segmantaion fault occur due to some reason 现在在这种情况下,只有debug-point1将打印在stdiodebugging点2打印被写入stdio缓冲区,但它不刷新,因为它没有得到\n所以我们认为崩溃发生在debugging点1 如果我用这种方式禁用stdio和stderrstream的缓冲选项,从这里来 setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); 那么这是安全的做到这一点? 为什么所有的stream都默认行缓冲? 编辑: Usualy对于任何文件stream,默认分配的缓冲区的大小是多less? 我认为它的OS依赖。 我想知道关于Linux?

擦除linux上的terminal输出

我正在写一个命令行程序,它将有一个状态栏,很像wget。 我面临的主要问题是:如何删除已经发送到stdout / stderr的内容? 我有想法:使用退格字符'\ B'和擦除我已经发送的输出。 这是最好的方法吗? 这是唯一的方法吗? 有没有更好的办法? PS:我不想使用像ncurses这样的东西。 简单的老C请。 谢谢 编辑: 我也可以上去和/或下去吗? 例如:我有10行输出,我想把第三行从Doing ABC做到ABC: Done 。 我怎样才能做到这一点? 另外,任何人都可以发布有关VT102字符的更多细节? 它有什么function? 如果您有任何问题,请发布好的链接。 谢谢

Linux:捕获已经运行的进程的输出(纯C!)

我的情况如下:我有很多小的小玩意儿(非常接近路由器,不完全是,但无论如何,这是不相关的); 他们正在运行一个基于MIPS的Linux发行版。 为了控制它们,可以在那里telnet(通过串行端口),然后向交互式的bash-like shell发出命令,然后写回一些输出。 shell的input和输出都连接到/ dev / ttyAS0。 现在,我想自动化所有这一切,即编写一个程序,它将在gizmo中运行,是一个监听某个端口的小型服务器,可以将任何命令传递给所述shell,捕获shell的输出并将其中继回到谁联系到服务器。 一世: 1)可以在Gizmo里面安装(小,<500KB)程序2)不能修改操作系统,启动脚本,shell,任何东西3)有root权限4)知道如何写SOAP服务器5)知道如何获得一个SOAP消息,将它翻译成一个命令并将其注入到/ dev / ttyAS0中6)不知道如何捕获shell的回复7)知道如何获取shell的回复,将其转换回SOAP消息并回复原始查询者。 所以基本上,问题是6):如何在/ dev / ttyAS0中注入一个string,从而使shell执行它,捕获shell的输出? 我知道 Redirecting Output from a Running Process 也就是说,我知道如果我在箱子里面运行GDB(或者strace),我可以改变shell的stdout,但是我不能在那里安装它 – 它太大了,反正这个方法看起来太像一个黑客了。 所以,总结一下: 如何在不使用gdb或strace的情况下捕获已经运行的进程的标准输出(IN PURE C),而无法访问进程的启动方式? 或者 – 几乎等同于 – 如何捕捉正在写入terminal的内容,IN PURE C?

Linux – 将命令的STDOUT发送到RSS源

我正在寻找使用个人的RSS饲料的系统报告,所以我想知道是否有可能创build一个脚本,发送其1美元的RSS饲料,ala self_test_command > rss_report.sh 。 我现在还没有设置RSS源,那么设置从Linux机器运行的RSS源最简单的方法是什么?

如何作为Systemd服务运行输出到文件?

在将程序作为systemd服务运行时,我无法将STDOUT&STDERR传输到文件。 我已经尝试将以下内容添加到.service文件中: ExecStart=/apppath/appname > /filepath/filename 2>&1 但是这不起作用。 输出结果在/ var / log / messages中,可以使用journalctl查看,但我想要一个单独的文件。 我也试过设置StdOutput=tty但是找不到将其redirect到文件的方法。 任何帮助,将不胜感激。

为什么stdout在redirect到文件时需要显式刷新?

printf()的行为似乎取决于stdout的位置。 如果stdout被发送到控制台,则printf()是行缓冲的,并在打印换行符后被刷新。 如果stdout被redirect到一个文件,除非fflush()被调用,否则缓冲区不会被刷新。 而且,如果在将stdoutredirect到文件之前使用printf() ,则后续写入(到文件中)将被行caching,并在换行之后刷新。 什么时候stdout行缓冲,什么时候fflush()需要被调用? 每个的最小示例: void RedirectStdout2File(const char* log_path) { int fd = open(log_path, O_RDWR|O_APPEND|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO); dup2(fd,STDOUT_FILENO); if (fd != STDOUT_FILENO) close(fd); } int main_1(int argc, char* argv[]) { /* Case 1: stdout is line-buffered when run from console */ printf("No redirect; printed immediately\n"); sleep(10); } int main_2a(int argc, char* argv[]) { /* Case […]

在batch file中读取标准inputstream

是否可以在batch file中使用pipe道标准inputstream? 我希望能够将一个命令的输出redirect到我的batch fileprocess.bat列表中,如下所示: C:\>someOtherProgram.exe | process.bat 我的第一次尝试看起来像: echo OFF setlocal :again set /p inputLine="" echo.%inputLine% if not (%inputLine%)==() goto again endlocal :End 当我testing它与type testFile.txt | process.bat type testFile.txt | process.bat重复打印第一行。 有另一种方法吗?

Powershell:捕获程序stdout和stderr来分离variables

在一次运行中,是否可以将外部程序的stdoutredirect到外部程序的variables和stderr? 例如: $global:ERRORS = @(); $global:PROGERR = @(); function test(){ # Can we redirect errors to $PROGERR here, leaving stdout for $OUTPUT? $OUTPUT = (& myprogram.exe 'argv[0]', 'argv[1]'); if ( $OUTPUT | select-string -Pattern "foo" ) { # do stuff } else { $global:ERRORS += "test(): oh noes! 'foo' missing!"; } } test; if ( […]