gpt4 book ai didi

c - 将标准输出重定向到 C 中的变量

转载 作者:行者123 更新时间:2023-12-04 10:15:41 25 4
gpt4 key购买 nike

我对如何将 stdout 重定向到 C 中的变量进行了大量研究,但没有成功。我所看到的只是使用 dup2 和 freopen 将 stdout 重定向到一个文件,这不是我需要的。我想知道是否有可能将它重定向到一个变量而不先将它重定向到一个文件?

我使用 ubuntu 和 C 来创建代码。 Im uaing GCC 4.7.3 作为编译器。

我确实使用了 dup2 和 freopen 并尝试做一些变通,但过了一段时间。我意识到首先将它重定向到一个文件然后再重定向到变量是一个坏主意(因为将要写入的数据)。我使用了 freopen,但它不起作用,可能是因为 gcc 4.7.3 没有包含它的库。

是否可以将标准输出重定向到一个变量?如果是,如何?如果你不确切知道如何。请给我一个想法,我将负责研究。

Edit the post to add my code

正如我上面提到的,我确实使用了 dup2 并将 stdout 重定向到一个文件。下面的代码显示了我是如何做到的。它正在工作,但我意识到不应该将数据保存到文件中。如果可以只更改一部分代码,我该怎么做才能将标准输出重定向到变量?

这是代码..

char com1[] = "sudo mmm\n"; 

if (execCom!=NULL)
{
fp=popen(com1,"w");

com = strtok(execCom, "\n");

// walk through other commands that is separated by \n
while( com != NULL )
{
strcpy(comR,"\0");
strcat(comR,com);
strcat(comR,"\n");
fwrite(comR, 1, strlen(comR),fp);
com = strtok(NULL, "\n");
}

pclose(fp);
fclose(out);
}

最佳答案

是的,这是可能的。

你需要测试这段代码,因为我没有编译器

沿着线走

#include <stdio.h>
#include <unistd.h>

int main()
{
int fd[2];
pipe(fd);
if (fork() == 0) {
dup2(fd[1], STDOUT_FILENO);
execlp("ls","ls",NULL);
} else {
char buffer[1000];
ssize_t size = read(fd[0], buffer, 1000);
if ( (size>0) && (size<sizeof(buffer)) )
{
buffer[size]='\0';
printf("%s\n", buffer);
}
}
}

当然,您需要进行错误检查,还可能需要循环读取缓冲区。

我猜你需要阅读手册页

关于c - 将标准输出重定向到 C 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25325873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com