0

当调用 Cap'n Proto's 时writeMessageToFd(pipe, message);,我收到此错误:

terminate called after throwing an instance of 'kj::ExceptionImpl'
  what():  src/kj/io.c++:323: failed: ::writev(fd, current, iov.end() - current): Bad file descriptor; fd = -1
stack: 0x7efead69cf89 0x7efead6a0c7f 0x7efead6a2648 0x7efead6a24f7 0x7efead8f40b7 0x7efead8f42a4 0x402c7b 0x402a36 0x4028df 0x7efeabd50e50 0x7efeabd5181a 0x7efeabd52669 0x7efeabd52a03 0x7efeabd52bb2 0x402865 0x4027ab
4

1 回答 1

1

您并没有真正问过问题,但我可以从该异常中告诉您,您不应该尝试使用无效的文件描述符调用 writeMessageToFd(异常文本告诉您此“错误的文件描述符;fd = -1”) .

您有两个选择: - 如果 pipe == -1,则不要调用该函数(可能最好,您确实应该检查返回 pipe 的调用没有返回 -1) - 用 a 包围您对 writeMessageToFd() 的调用尝试/捕获并适当地处理异常

你真的应该使用前者并适当地处理管道中的 -1 值。

于 2015-08-13T09:23:48.047 回答