![]() |
1
5
为什么会
显而易见的原因是“因为
根据
the documentation
,
没有转义;如果不读取命令输出,就无法知道其长度,并且只能读取一次。您必须分块读取它,或者根据需要增加缓冲区,或者动态解析。
但是,当然,您可以直接使用系统调用来避免整个问题。
|
![]() |
2
6
你做得太难了。
波彭(3)
返回常规的旧
在C++中,它更容易——
这里还有一些错误处理,但这就是主意。重点是你对待
|
![]() |
3
3
我不确定你能不能像这样浏览/浏览所有的管道流。 你检查过bufsize的值吗?malloc失败的一个原因是缓冲区大小异常。 |
![]() |
4
3
(术语注释:在Unix和Linux中,“系统调用”通常指从用户空间代码调用内核函数。将其称为“
无论如何,您可以像读取任何其他文件一样读取进程的输出。明确地:
|
![]() |
5
1
感谢所有花时间回答的人。一个同事把我指给 ostringstream 班级。下面是一些示例代码,它基本上完成了我在原始问题中所做的工作。
|
![]() |
6
1
要在更新中回答问题:
这就够了吗? |
![]() |
7
0
首先要检查的是bufsize的值-如果恰好是<=0,那么malloc可能会返回一个空值,因为此时您正试图分配一个大小为0的缓冲区。 另一个解决方法是让malloc为您提供一个大小为n>=1的缓冲区(bufsize+n),它可以解决这个特定的问题。 除此之外,你所发布的代码是纯C,而不是C++,所以包括过多。 |
![]() |
8
0
检查你的臀部尺寸。
原因是
|
![]() |
9
0
管道不是随机进入的。它们是连续的,这意味着一旦你读到一个字节,管道就不会再把它发送给你。很明显,这意味着你不能倒带。 如果您只想将数据输出回用户,可以执行以下操作:
这将一个接一个地从df管道中拉出字节,并将它们直接泵入输出。 现在,如果您想访问DF输出作为一个整体,您可以将它管到一个文件中并读取该文件,或者将输出连接到一个构造中,例如C++字符串。 |
![]() |
user3732361 · 读取大文件时如何选择块大小? 6 年前 |
![]() |
Sector · 将参数传递给自己的execv内核实现 6 年前 |
![]() |
Arka Pal · 关闭管道中未使用的端部 6 年前 |
![]() |
Nat · 释放malloc内存时程序停止工作 6 年前 |
![]() |
Mengfan Ma · 作者所说的操作系统中的目录结构是什么意思? 6 年前 |
![]() |
Mengfan Ma · 在何处执行磁盘调度 6 年前 |