重定向输出从标准输出到一个字符串?(redirect output from stdout to a

2019-07-18 11:28发布

在C I要重定向从标准输出的过程的输出,写入到“共享存储器段”,这可以被认为是作为一个字符数组或字符串的指针
我知道有DUP2,但它需要文件discriptors作为参数不是一个指针数组。 有没有什么办法可以将其重定向到一个字符串?

Answer 1:

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

看到freopen函数和函数setbuf对它们的定义



Answer 2:

这应该在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);


Answer 3:

你可以写一个管道,并从中读取到共享内存(也就是,如果你不能使用管道而不是共享内存的字符串)。



Answer 4:

用的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的读它,并将其保存为一个字符串,但要小心

你还可以找到缓冲的一个例子进入管在这里



Answer 5:

为了做标准输出的一个简单的重定向到一个储存串,只是这样做:

#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);
}


文章来源: redirect output from stdout to a string?