在 C 中,我想将进程的输出从 stdout 重定向到写入“共享内存段”,它可以被认为是一个 char 数组或带有指针的字符串
我知道有 dup2 但它需要文件描述符作为参数不是指向数组的指针。有没有办法将它重定向到一个字符串?
问问题
13889 次
5 回答
3
这应该适用于 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);
于 2017-08-21T18:02:57.137 回答
0
您可以写入管道,然后将其读取到共享内存中(也就是说,如果您不能使用管道而不是共享内存中的字符串)。
于 2013-01-20T19:34:51.133 回答
0
为了将标准输出简单地重定向到内存字符串,只需执行以下操作:
#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);
}
于 2017-03-30T03:36:19.823 回答
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 读取它并将其保存到字符串;但要小心
您还可以在此处找到缓冲到管道中的示例
于 2016-01-23T07:22:52.343 回答