ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

Windows2000を利用しているのですが、Windowsの共有メモリは固定ファイルを利用すると思うのですが、
このファイルは通常どこ(フォルダ)にどのような形(ファイル名)で保存されているのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>どっちにしろオンメモリじゃないんですよね。

。。。

http://www.microsoft.com/japan/msdn/library/defa …

これを指定すればいいだけでは?
FILE_ATTRIBUTE_TEMPORARY
    • good
    • 0

共有メモリという表現は間違ってませんか?


ひょっとしてページングファイルのことですか?

一般的にメモリという表現は物理メモリを指します。

ちなみに、ページングファイルの中身を見れたとしても意味がないと思いますが・・・ なんせ内部形式ですから
    • good
    • 0
この回答へのお礼

あぁ、わかりました。
CreateFileしていないと、つまり、CreateFileMappingでhFileに0xffffffffを指定したら、ページングファイル上にマッピングされちゃうんですね...

どっちにしろオンメモリじゃないんですよね。。。。

お礼日時:2003/11/05 12:12

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qsocket: recvはいつ,どれだけ受け取るのか?

 現在,参考書にしたがってC++でソケットプログラミングを書いています.

 sendとrecvを非同期にするために,本では select関数やWSAAsyncSelect関数などを利用していて,実際,本のとおりに書いて上手く動いています.

 ここで伺いたいのですが,recvは,どうやって「データが届いたか」を知るのでしょうか.

 同期ならば,トランシーバでの会話のように送信側が「どうぞ」といって送受信を交代させることができますが,非同期ならばそれができません.

 NICとかが,プログラムに「届いたぞ!( or これから届くぞ!)」と教えてくれるのでしょうか.あるいは逆に,プログラムがNICに「届いてる?」と聞いているのでしょうか.仮に,ここに書いたような方法で届いたことが分かったとしても,どれくらい受け取ればいいかは分かりません(それも併せて教えてもらっているのでしょうか.データを送るときには,どれだけ送ればいいか分かりますよね.受信するときはどうしてるのかを知りたいと思っています).

Aベストアンサー

Linux しか知らないので Linux で説明をします。

NIC が通信パケットを受け取ると割り込みが発生し、CPU は割り込みを受け付けて、対応するデバイスドライバを起動します。この時、ドライバはソケットバッファと呼ばれる構造体にパケットの中身をコピーして、Linux カーネルの本体に渡し、そこで TCP 等の上位プロトコル処理が行われます。

一方、ユーザプログラムの方は、 select() なり read() で待っている訳ですが、OS はもちろんプロセスが何を待っているかを知っているので、対応する待ちの条件が満たされると、この場合は select() や read() が、抜けてくる(return する)訳です。

という事で、ユーザのプログラムは select() なり read() なりで受信データを「待つ」ことが必要です。もちろん select() や read() が呼ばれた時点で既に受信しているのならば、それらは直ぐに帰ってきます。read() や recv() はデータが届いた事を知る、というよりは、届いているかチェックして、まだ届いていなければ届くまで待つ(read() が抜けてこない)という処理になります。また NIC とユーザプログラムが直接やり取りをするのではなく、間にバッファがあって、対応するソケットのデータがある(受信済み)/ないか(未受信)、という問い合わせを行っているだけです。

ソケットの場合、データの送受信は非同期であり、送受信のタイミングのずれは(ソケット)バッファである程度吸収されます。もちろん、送受信バッファが満杯になった場合は流量制御が働いて、結果的に送信側の write() や send() が待ちに入ることになります。

Linux (Unix) のソケットの受信では、read() 等で指定されたバッファが常に満杯で返されるとは限らない設計になっています。つまり、その時に受信しているデータを返すだけなので、read() で返されたバイト数を必ず見ないと間違った動きになるので注意してください。

Linux しか知らないので Linux で説明をします。

NIC が通信パケットを受け取ると割り込みが発生し、CPU は割り込みを受け付けて、対応するデバイスドライバを起動します。この時、ドライバはソケットバッファと呼ばれる構造体にパケットの中身をコピーして、Linux カーネルの本体に渡し、そこで TCP 等の上位プロトコル処理が行われます。

一方、ユーザプログラムの方は、 select() なり read() で待っている訳ですが、OS はもちろんプロセスが何を待っているかを知っているので、対応する待ちの条件が満...続きを読む

QWindows上で、シグナル(SIGTERM )を送信したい(C、C++)

Linux上で、シグナル送信(SIGTERM をシェルで送信)し、プログラムでシグナル受信ハンドラを用意し作成してましたが、Windowsに変更になりました。
その場合、バッチファイルかプログラムでシグナル(SIGTERM)を送信することは可能でしょうか。
それか、シグナルの代わりになる処理などはありますでしょうか。

Aベストアンサー

>SIGTERMは指定できるのですが、プロセスIDを指定できない様です。
>何か他に方法はありますでしょうか。
これは失礼しました。
シグナルの代わりになる正当な方法が無いのかも?

自分ならばオリジナル修正を少なくするよう、
・適当なスレッドを起こし、
・そこで適当な待機オブジェクトを待ったり、メッセージ受信する(適当なプロセス間通信)
等を考えます。

後は、そのスレッドから raise 関数が正しく動くかどうか…


人気Q&Aランキング