6

Cでは、プロセスの出力をstdoutからリダイレクトして、「共有メモリセグメント」に書き込みます。これは、char配列またはポインタを含む文字列と
考えることができます。dup2があることはわかっていますが、引数としてファイル記述子を使用します。配列へのポインタではありません。文字列にリダイレクトする方法はありますか?

4

5 に答える 5

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

それらの定義については、 freopensetbufを参照してください。

于 2013-01-20T19:39:35.387 に答える
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

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 に答える
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);
}
于 2017-03-30T03:36:19.823 に答える