C++ 从C++;带有execv的代码失败

C++ 从C++;带有execv的代码失败,c++,linux,file-descriptor,netcat,C++,Linux,File Descriptor,Netcat,我有一个非常基本的Linux脚本(/home/scripts/script.sh): 当我尝试从shell运行它时,它运行良好。所以脚本很好(而且,done被写入/tmp/result文件): 但是,当我试着在前景守护进程中从C++代码中运行时: const char **argv = new const char* [3]; argv[0] = "/home/scripts/script.sh"; argv[1] = "/home/scripts/script.sh"; argv[2] = N

我有一个非常基本的Linux脚本(/home/scripts/script.sh):

当我尝试从shell运行它时,它运行良好。所以脚本很好(而且,done被写入/tmp/result文件):

但是,当我试着在前景守护进程中从C++代码中运行时:

const char **argv = new const char* [3];
argv[0] = "/home/scripts/script.sh";
argv[1] = "/home/scripts/script.sh";
argv[2] = NULL;
execv(argv[0], const_cast<char**>(&argv[1]));
为什么fd值是荒谬的?我的守护进程在前3-5分钟内打开了一些文件,可能netcat无法处理较大的数字作为fd


我该如何克服这个问题?

这个问题是由以下原因造成的

首先,我没有意识到这个信息的重要性:

Preposterous fd value 17
这实际上是netcat的一条非常重要的错误消息,因为它的设计不是为了在默认情况下使用高于16的fds,这对于一个简单的脚本来说是完全可以接受的

但是,在多线程环境中,当调用netcat时,可能已经使用了超过16个FD

是2007年的消息,它将16更新为1024,作为错误修复

Netcat的官方网页是,目前的版本是1.10,它仍然将FD_SETSIZE定义为16


解决方案是抓取代码,修补代码并建立代码。< /P> <代码>新< /COD>是C++,而不是C。可能您连接到的服务器有速率限制,您正在超过它。当FD大于

FD_SETSIZE
时,会出现此错误消息。在Linux上,这是1024,我不知道你为什么在17,不,没有循环。我已经找到了。。我的网猫非常老了。看,这里有一个2007年的错误修复:为什么要使用
const\u cast
const char **argv = new const char* [3];
argv[0] = "/home/scripts/script.sh";
argv[1] = "/home/scripts/script.sh";
argv[2] = NULL;
execv(argv[0], const_cast<char**>(&argv[1]));
10.10.10.1: inverse host lookup failed: Unknown host
(UNKNOWN) [10.10.10.1] 3333 (?) open
Preposterous fd value 17
 sent 0, rcvd 0
Preposterous fd value 17