我想将进程的输出从stdout重定向到写入“共享内存段”,可以将其视为char数组或带指针的字符串
我知道有dup2但它需要文件描述符作为参数而不是指向数组的指针。有没有办法将它重定向到字符串?
答案 0 :(得分:5)
char string[SIZE];
freopen("/dev/null", "a", stdout);
setbuf(stdout, string);
答案 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);
}