草庐IT

supervisor-stdout

全部标签

linux - 是否有可能 linux 文件描述符 0 1 2 不适用于 stdin、stdout 和 stderr?

当程序开始时,它是否默认为stdin、stdout和stderr使用文件描述符0、1和2?并且API调用(例如open(...)、socket(...)不会返回0、1和2,因为这些值已经被采用了吗?open(...)或socket(...)是否会返回0、1或2。而0、1和2与stdin、stdout和stderr无关。 最佳答案 在filedescriptorlevel,stdin定义为文件描述符0,stdout定义为文件描述符1;stderr被定义为文件描述符2。参见this.即使您的程序或shell更改(例如,使用dup2(2)

linux - 是否有可能 linux 文件描述符 0 1 2 不适用于 stdin、stdout 和 stderr?

当程序开始时,它是否默认为stdin、stdout和stderr使用文件描述符0、1和2?并且API调用(例如open(...)、socket(...)不会返回0、1和2,因为这些值已经被采用了吗?open(...)或socket(...)是否会返回0、1或2。而0、1和2与stdin、stdout和stderr无关。 最佳答案 在filedescriptorlevel,stdin定义为文件描述符0,stdout定义为文件描述符1;stderr被定义为文件描述符2。参见this.即使您的程序或shell更改(例如,使用dup2(2)

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

有时我们会以这种方式在我们的代码中放置一些调试打印printf("successfullyreachedatdebug-point1\n");somecodeishereprintf("successfullyreachedatdebug-point2");在最后一个printf之后发生了段错误。现在在这种情况下,只有debug-point1会在stdio上打印debug-point2打印被写入stdio缓冲区但它没有被刷新,因为它没有得到\n所以我们认为崩溃在调试点1之后发生。为了解决这个问题,如果我用stdio和stderr禁用缓冲选项,就像这样setvbuf(stdout,NUL

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

有时我们会以这种方式在我们的代码中放置一些调试打印printf("successfullyreachedatdebug-point1\n");somecodeishereprintf("successfullyreachedatdebug-point2");在最后一个printf之后发生了段错误。现在在这种情况下,只有debug-point1会在stdio上打印debug-point2打印被写入stdio缓冲区但它没有被刷新,因为它没有得到\n所以我们认为崩溃在调试点1之后发生。为了解决这个问题,如果我用stdio和stderr禁用缓冲选项,就像这样setvbuf(stdout,NUL

linux - 为什么 wget 输出到 stderr 而不是 stdout?

在30分钟徒劳地trycatchwget的输出后,我发现程序写入了stderr而不是stdout。在网络和堆栈溢出中搜索表明这是一个众所周知的事实。知道为什么会这样吗? 最佳答案 众所周知,因为它在manual中.在stderr上报告消息很常见,因为消息与stdout上的常规输出分开。当您将多个工具与管道结合使用时,这很有用。在这种情况下,当常规输出和诊断消息混淆时,情况会很糟糕。 关于linux-为什么wget输出到stderr而不是stdout?,我们在StackOverflow上找

linux - 为什么 wget 输出到 stderr 而不是 stdout?

在30分钟徒劳地trycatchwget的输出后,我发现程序写入了stderr而不是stdout。在网络和堆栈溢出中搜索表明这是一个众所周知的事实。知道为什么会这样吗? 最佳答案 众所周知,因为它在manual中.在stderr上报告消息很常见,因为消息与stdout上的常规输出分开。当您将多个工具与管道结合使用时,这很有用。在这种情况下,当常规输出和诊断消息混淆时,情况会很糟糕。 关于linux-为什么wget输出到stderr而不是stdout?,我们在StackOverflow上找

linux - 在 Makefile 规则中管道 stdout 和 stderr

我想将脚本的输出通过管道传输到另一个程序。我通常会使用这两种形式做的事情:pythontest.py2>&1|pyrgpythontest.py|&pyrg我的问题是它在makefile中不起作用:[Makefile]test:pythontest.py2>&1|pyrg[doesn'twork]我希望避免编写完成该工作的脚本文件。编辑:这似乎是一个pyrg问题:pythontest.py2>&1|teetest.out//Writestothefilebothstderrandstdoutcattest.out|pyrg//Worksfine!pythontest.py2>&1|py

linux - 在 Makefile 规则中管道 stdout 和 stderr

我想将脚本的输出通过管道传输到另一个程序。我通常会使用这两种形式做的事情:pythontest.py2>&1|pyrgpythontest.py|&pyrg我的问题是它在makefile中不起作用:[Makefile]test:pythontest.py2>&1|pyrg[doesn'twork]我希望避免编写完成该工作的脚本文件。编辑:这似乎是一个pyrg问题:pythontest.py2>&1|teetest.out//Writestothefilebothstderrandstdoutcattest.out|pyrg//Worksfine!pythontest.py2>&1|py

c - 在 C 中,如何在进行 execvp() 或类似调用时将 stdin/stdout/stderr 重定向到文件?

我有以下代码:pid_tpid=fork();if(pid==-1){//...}elseif(pid==0){stdin=someopenfile;stdout=someotherfile;stderr=somethirdopenfile;execvp(args[0],args);//handleerror...}else{//...}问题是,execvp()调用的输入/输出仍然是控制台,而不是文件。显然我做错了什么,正确的方法是什么? 最佳答案 正确的方法是使用dup2将文件描述符STDIN_FILENO、STDOUT_FILE

c - 在 C 中,如何在进行 execvp() 或类似调用时将 stdin/stdout/stderr 重定向到文件?

我有以下代码:pid_tpid=fork();if(pid==-1){//...}elseif(pid==0){stdin=someopenfile;stdout=someotherfile;stderr=somethirdopenfile;execvp(args[0],args);//handleerror...}else{//...}问题是,execvp()调用的输入/输出仍然是控制台,而不是文件。显然我做错了什么,正确的方法是什么? 最佳答案 正确的方法是使用dup2将文件描述符STDIN_FILENO、STDOUT_FILE