メモリを共有する必要がある2つのプログラムがあります。プログラムAではCの共有メモリにアクセスする際のセグメンテーションフォルト
struct town_t {
int population;
char * name;
}
、データはMMAPを使用して、共有メモリに書き込まれます:のは、この目的のために、この形式の構造体があり、一つのプログラムA、他の1 B.
を呼ぶことにしましょう。これはプログラムAのために働きます(name
のためにstrcpyを使います)
プログラムBの目的は単にデータを読むことです。これもmmapで動作します。共有メモリのフィールドへのアクセスは問題なく動作します。ただし、フィールドにアクセスすると、セグメント化エラーが発生します。
私はstrcpyを使っていたので、文字列全体が共有メモリになければなりませんか?
次のフラグを使用して、エラーを返さない共有メモリへのポインタを取得します。
tptr = (struct town_t *) mmap(0, 1024, PROT_READ, MAP_SHARED, shm_fd, 0)
私は実際にプログラムBから文字列(char *)を読み取ることができますか?
'strcpy'を使うことは、文字列が共有メモリにあるかどうかとは関係ありません。どのようなメモリが 'name'を指し、どのようにそのメモリを割り当てましたか? – immibis
@immibis私はstrcpyを共有メモリポインタに使用しています。私はchar * str = "string"で割り振ります。 –
だから、 'tptr = mmap(...);を実行します。 char * str = "文字列"; strcpy(tptr-> name、str); '? – immibis