将输出从stdout重定向到字符串?

时间:2013-01-20 19:31:46

标签: c redirect stdout

在C中

我想将进程的输出从stdout重定向到写入“共享内存段”,可以将其视为char数组或带指针的字符串
我知道有dup2但它需要文件描述符作为参数而不是指向数组的指针。有没有办法将它重定向到字符串?

5 个答案:

答案 0 :(得分:5)

char string[SIZE];
freopen("/dev/null", "a", stdout);
setbuf(stdout, string);

请参阅freopensetbuf了解其定义

答案 1 :(得分:1)

这应该适用于UNIX系统:

// set buffer size, SIZE
SIZE = 255;

char buffer[SIZE];
freopen("/dev/null", "a", stdout);
setbuf(stdout, buffer);
printf("This will be stored in the buffer");
freopen ("/dev/tty", "a", stdout);

答案 2 :(得分:0)

您可以写入管道,并从中读取到共享内存中(也就是说,如果您不能在共享内存中使用管道而不是)。

答案 3 :(得分:0)

使用shm_open,您可以将文件描述符指向共享内存,并将其传递给dup2函数,如下所示:

int fd = shm_open("shm-name", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
dup2(fd, STDOUT_FILENO);
fprintf(stdout, "This is string is gonna be printed on shared memory");

毕竟寻找共享内存到开头(用lseek读取它并将其保存为字符串;但要小心

您还可以在Here

中找到缓冲管道的示例

答案 4 :(得分:0)

为了简单地将stdout重定向到内存字符串,只需执行以下操作:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PATH_MAX 1000

int main()
{
    FILE *fp;
    int status;
    char path[PATH_MAX];

    fp = popen("ls ", "r");

    if (fp == NULL)  return 0;


    while (fgets(path, PATH_MAX, fp) != NULL)
        printf("\nTest=> %s", path);

    status = pclose(fp);
}