in C
i want to redirect the output of a process from stdout to write to a "shared memory segment" which can be thought of as a char array or a string with a pointer
i know that there is dup2 but it takes file discriptors as argument not a pointer to an array. is there any way to redirect it to a string?
This should work on UNIX systems:
// 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);
You could write to a pipe, and read from it into shared memory (that is, if you can't use the pipe instead of the string in shared memory).
with shm_open you can have a file descriptor pointing to a shared memory and pass it to dup2 function as below:
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");
And after all seek the shared memory to the beginning (with lseek read it and save it to a string; But be careful
Also you can find an example of buffering into pipe in Here
In order to do a simple redirection of stdout to a memory string, just do this:
#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);
}
来源:https://stackoverflow.com/questions/14428406/redirect-output-from-stdout-to-a-string