在我的C程序中,运行在Linux上,它使用system()创建子进程,我注意到当我将标准输出重定向到管道或文件时,子进程的输出被发送到缓冲I/O函数(如printf() )的输出之前。当stdout被留给终端时,输出将按照预期的顺序进行。我将程序简化为以下示例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("1. output from printf()\n");
system("echo '2. output from a command
我正在经历一个问题,在这个问题上,我不能完全重定向可执行文件的输出。为了便于讨论,假设可执行文件是printnames.exe。
如果我执行printnames.exe (没有重定向),下面的输出将显示在命令窗口中:
Adam
Tim
Jesse
Sean
但是,如果我执行printnames.exe > myfile.txt,命令窗口将显示:
Tim
Sean
...and myfile.txt的内容是:
Adam
Jesse
这怎麽可能?代码中的什么会导致这样的行为?重定向操作符不应该重定向所有输出吗?
如何从Java程序运行外部命令(通过shell),这样就不会发生重定向,然后等待命令结束?我希望外部程序的文件描述符与Java程序的文件描述符相同。特别是,我不希望将输出重定向到程序正在读取的管道。让Java程序中继输出并不是一个解决方案。
这意味着对的简单调用不是解决方案。我假定涉及到,但是如何指定输出和错误流必须与调用的Java相同?
class A {
public static void main(String[] args) {
try {
ProcessBuilder pb = new ProcessBuilder("echo
我正在尝试捕获linux中"sort -c“的输出。我试着将它重定向到一个文件中,使用了tee命令,但两者都没有帮助。有什么建议吗?
例如:
roor>cat db | sort -c
sort: -:319: disorder: 1842251880: aa bb bc dd ee
以下操作无法给出输出
roor>cat db | sort -c > fileName
roor>cat db | sort -c |tee fileName
示例文件:
>cat file
111 aa as sdasd
222 sadf dzfasf af
33
我正在尝试将命令的所有输出(stdout + stderr)重定向到单个文件:
C:\>dir 1> a.txt 2> a.txt
The process cannot access the file because it is being used by another process.
有没有可能,或者我应该只重定向到两个单独的文件?