1

パイプ接続を使用して2つの子プロセスを作成しました。

プロセスAのコード:

char *buf;
size_t size;

buf = "some string";
size = strlen(buf);
printf("size in process A:%zu\n", size);
write(pfds[3][1], &size, sizeof (size_t));
write(pfds[3][1], buf, sizeof (buf));


buf="other string";
size = strlen(buf);
printf("size in process A:%zu\n", size);
write(pfds[3][1], &size, sizeof (size_t));
write(pfds[3][1], buf, sizeof (buf));

プロセスBのコード:

size_t size;
/*read in size from Process A*/
read(pfds[3][0], &size, sizeof (size_t));
printf("READ size in process B: %zu\n", size);

/*allocate memory space for the line*/
char *buf = malloc(size);

/*read in line from process A*/
read(pfds[3][0], buf, size);
printf("READ buf in process B: %s.\n", buf);

/*read in size from readProcess*/
read(pfds[3][0], &size, sizeof (size_t));
printf("READ size in process B:%zu\n", size);

/*free the allocated memory*/
free(buf);

出力は次のようになります。

size in process A:11
size in process A:12
READ size in process B: 11
READ buf in process B: some
                            .
READ size in process B:101

サイズを使用してwhileループを制御し、サイズが0になるまでAからBに行を継続的に送信したいのですが、何が間違っているのでしょうか。サイズは、最初に送信されたときは正しいですが、2回目は正しくありません。

4

1 に答える 1

4

sizof(buf)はポインタのサイズである4を返します。必要なのはstrlen(buf)なので

write(pfds [3] [1]、buf、sizeof(buf));

する必要があります

write(pfds [3] [1]、buf、strlen(buf));

于 2012-05-27T08:52:52.373 に答える