我的总体目标(问题的动机):
从 C/C++ 编译/链接中提供可执行文件ìo
,以便用户可以交替执行它:
io 3> myout.txt
. 在这种情况下myout.txt
,将包含我从代码中明确发送到 FD=3 的任何内容。io
. 在这种情况下,会显示一条错误消息,指示用户需要3> ...
. (另一种选择只是失去该输出,我仍然必须决定哪个是最佳选择)。
我还需要能够同时写入标准输出/标准错误。
正如我所看到的,如果我不能告诉用户“嘿,你必须重定向的 FD 是 #3”,他就不能确定他是否真的会捕获输出。因此,我得出结论,我必须对 FD=3 进行硬编码(错误的结论?否则如何实现目标?)。
这是在Smart-write to random file descriptor from C/C++中提出的问题,我在这里遵循 SO 的指示:“您的帖子与类似问题相关。如果这些问题不能解决您的问题,请提出新问题。” ......我在这里。
我承认因无法有效地表达我的疑问或以其他方式理解评论而感到沮丧。我找不到上述描述的解决方案,希望这是一个富有成效的替代尝试。
这带来了很多问题,我问了一些相关的问题(列在底部)。即使没有一个问题得到答案,从发布的评论来看,我最终还是很困惑。特别是,我在这里总结了一个特定的基本问题(这就是为什么我认为这不是骗局):
除了 FD=0,1,2 之外,是否可以编写安全且成功地写入手动选择的文件描述符编号的 C/C++ 代码? (我想这是满足顶部所述目标的唯一方法)。那会是这样的
int main() {
const int fd = 3;
然后写信fd
给
ssize_t nbytes = write(fd, ...
或者
FILE * fp = fdopen(fd, "a"); /* or some other mode */
fprintf(fp, ...
(可能还有其他方法)。
在从 C/C++ 智能写入任意文件描述符中,我发布了包含此用法的代码,并且发布的评论建议了一种完成代码的方法(即使我没有设法使其工作)。无论如何,使用手选fd
号码是可以的。
在使用 fdopen 之前的安全检查中,发布的评论建议我永远不应该使用手工挑选的fd
号码。
然后我对此感到困惑。
我的第三个相关问题是使用 fdopen 的正确方法