草庐IT

stdout_writer

全部标签

Linux/珀尔 : Additional output buffers other than STDOUT and STDERR?

出于好奇,是否可以在Perl脚本中创建、实例化或以其他方式访问除STDOUT和STDERR之外的其他输出缓冲区?用例是额外的输出以通过管道传输到文件或其他命令,例如./doublerainbow.pl3>full_on.txt4>all_the_way!.txt 最佳答案 当然。使用>&=模式的open命令允许您打开任意文件描述符上的文件句柄。#perl4fd.pl>file12>file23>file34>file45&=3';openNONSTDBAR,'>&=4';openNONSTDBAZ,';$echopppbbbttt>

linux - 检查 bash 脚本中是否有 stdout 重定向

我需要检查我的程序的输出是否被重定向;如果是,我需要保留并通过邮件发送。例子:$myprogram-param1-param2-param3>/home/polly/log.txtmyprogram.sh:if'redirectionisnotempty';thencat|mailx-s"Thisisatestemail."polly@gmail.comfi 最佳答案 您可以检查stdout是否是终端。当stdout被重定向或通过管道传输时,它将不是终端。您可以使用带有-t选项的测试命令来获取此信息:if[-t1];then#std

c - 为什么不能将 asm 中调用 c 库 printf 的 stdout 传送到其他程序?

我写了一个简单的NASM程序:打印测试.asmsection.datastr_outdb"val=%d",10,0section.textglobalmainexternprintfmain:PUSH5PUSHDWORDstr_outCALLprintfADDESP,8MOVEAX,1INT80h我正在使用以下命令链接并创建一个可执行文件:nasm-felf-lprinttest.lstprinttest.asmgcc-oprinttestprinttest.o当链接和执行时,这会毫无问题地向控制台打印“val=5”。据我所知,默认情况下调用printf会写入stdout。那么,为什么

c - 在 C 中,stdout 缓冲区的大小是多少?

今天我了解到stdout在设置为终端时是行缓冲的,在不同情况下是缓冲的。所以,在正常情况下,如果我使用printf()而没有终止'\n',它只会在缓冲区已满时打印在屏幕上。如何获取这个缓冲区的大小,这个有多大? 最佳答案 实际大小由个别实现定义;该标准没有规定最小尺寸(无论如何,基于我能够找到的)。不知道如何确定缓冲区的大小。编辑Chapterandverse:7.19.3Files...3Whenastreamisunbuffered,charactersareintendedtoappearfromthesourceoratth

linux - 如何将 stdout、stderr 重新路由回/dev/tty

我只是通过ssh连接到某个远程服务器,发现我尝试在bash中运行的所有命令/进程的stdout和stderr都被重定向到某个地方。所以,我得到了以下问题如何检测:1)哪个文件stdout,stderr在Linux中被重新路由?和2)以及如何默认将stdout和stderr重新路由回/dev/tty?提前谢谢你。 最佳答案 一个真正应该执行您在(2)中要求的命令是exec>/dev/tty2>&1但我怀疑你对问题的分析不正确。查看ssh-v...的输出会很有用(其中...是您在原始ssh中输入的任何参数命令)。

c - FILE * "/dev/stdout"和 stdout 之间的区别

让我们看看这个HelloWorld程序#includeintmain(intargc,char**argv){printf("Hello,World!");constchar*sFile="/dev/stdout";//or/proc/self/fd/0constchar*sMode="w";FILE*output=fopen(sFile,sMode);//fflush(stdout)/*forces`correct`order*/putc('!',output);//Useoutputorstdoutfromstdio.hreturn0;}当使用output文件描述符编译时,输出为:

linux - 需要一种临时重定向 STDOUT 的方法

我知道如何在Linux中重定向输出。问题是,我的bash脚本中有很多输出,我不想输入类似echo$foo>>bar一遍又一遍。我宁愿做这样的事情:hey,bash,forthetimebeingputallyourSTDOUTin"bar"echo$foo..OK,bash,youcangobacktoregularSTDOUTnow我尝试将FD1作为文件打开:exec1>bar但是当我完成后无法让STDOUT恢复正常。关闭文件exec1>&-给我无法解决的错误。有什么办法吗?谢谢! 最佳答案 你必须先保存stdout(例如将它链接

linux - 使用 find -exec 重定向 stdout 并且不创建新的 shell

我有一个脚本只将数据写入stdout。我需要为多个文件运行它并为每个输入文件生成不同的输出文件,我想知道如何为此使用find-exec。所以我基本上尝试了几个变体(为了可测试性,我用cat替换了脚本):find*-typef-execcat"{}">"{}.stdout"\;但无法使其工作,因为所有数据都被写入了一个名为{}.stdout的文件。最终,我可以让它工作:find*-typef-execsh-c"cat{}>{}.stdout"\;但是虽然这个最新的形式与cat配合得很好,但我的脚本需要通过几个初始化脚本加载环境变量,因此我最终得到:find*-typef-execsh-c

c - 为什么 stdout 在重定向到文件时需要显式刷新?

printf()的行为似乎取决于stdout的位置。如果stdout被发送到控制台,则printf()是行缓冲的,并在打印换行符后刷新。如果stdout被重定向到一个文件,除非调用fflush(),否则不会刷新缓冲区。此外,如果在将stdout重定向到文件之前使用了printf(),则后续写入(到文件)将进行行缓冲并在换行后刷新。什么时候stdout行缓冲,什么时候需要调用fflush()?每个的最小示例:voidRedirectStdout2File(constchar*log_path){intfd=open(log_path,O_RDWR|O_APPEND|O_CREAT,S_I

stdout - PHP CLI 不使用 stderr 来输出错误

我在MacOS中通过NSTask运行PHPCLI,但这个问题更多的是关于CLI本身。我正在监听stderr管道,但无论我尝试运行什么文件都没有输出:如果文件类型不是纯文本,stdout设置为?。如果文件是有错误的php脚本,错误消息仍会打印到stdout。有没有切换到解释器通过stderr来处理错误?除了解析stdout之外,我是否可以选择检测错误? 最佳答案 display_errorsdirective(可以在任何地方设置)可选地使用参数“stderr”,以便它向stderr而不是stdout报告错误或完全禁用错误输出。引用自P