是否可以向 popen() 传递一个字符串并使其 return 为空?
Is it possible to pass popen() a string and have it return null?
在处理 line/branch 单元测试的覆盖率时,我遇到了以下代码
bool run_command(char *command)
{
FILE *handle = popen(command, "r");
if (handle == nullptr)
{
std::cerr << "" << std::endl;
return false;
}
我尝试了很多不同的命令,例如
"cat /dev/null | head"
但似乎没有什么会导致 popen 失败。我还写了一个Python脚本,test.py,
for i in range(10000):
print(i)
并将“python test.py | head”传递给 popen()。这会导致“管道损坏”错误,但 popen 仍然是 return 一个有效地址。
是否可以将命令字符串传递给 popen 函数,使其 return 为空?
我不这么认为。 glibc's popen
ultimately calls posix_spawn
,它的文档说它只有在 fork()
失败时才会失败。这与文件名无关。
同样,popen
在调用 posix_spawn
之前还有其他一些方法可能会失败,但它们与文件名无关;只有 运行 内存或文件描述符不足的情况。
在处理 line/branch 单元测试的覆盖率时,我遇到了以下代码
bool run_command(char *command)
{
FILE *handle = popen(command, "r");
if (handle == nullptr)
{
std::cerr << "" << std::endl;
return false;
}
我尝试了很多不同的命令,例如
"cat /dev/null | head"
但似乎没有什么会导致 popen 失败。我还写了一个Python脚本,test.py,
for i in range(10000):
print(i)
并将“python test.py | head”传递给 popen()。这会导致“管道损坏”错误,但 popen 仍然是 return 一个有效地址。
是否可以将命令字符串传递给 popen 函数,使其 return 为空?
我不这么认为。 glibc's popen
ultimately calls posix_spawn
,它的文档说它只有在 fork()
失败时才会失败。这与文件名无关。
同样,popen
在调用 posix_spawn
之前还有其他一些方法可能会失败,但它们与文件名无关;只有 运行 内存或文件描述符不足的情况。