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
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 に答える