アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

[Prog1.c]、[Prog2.c]の2つのプログラムから同じSRAM領域にread/writeを
するプログラムを考えています。
プログラム言語はC言語、OSはLinuxです。

・[Prog1]
 一定周期でSRAM領域を読み込むプログラム。
 SRAM領域のデータに変化があったときにある処理を実行する。
/*********************************************************/
int desc = 0;
char old_ch[256];
char new_ch[256];
for(;;) {
desc = fopen("/dev/rasram", O_RONLY);
read(desc, &new_ch[0], 256);
if(strcmp(old_ch, new_ch)) {

//処理を実行・・・

strcpy(old_ch, new_ch);//古いデータを更新
}
close(desc);
sleep(5);
}
/*********************************************************/

・[Prog2]
 任意のタイミングでSRAM領域にデータを書き込むプログラム。
/*********************************************************/
int desc = 0;
char write_ch[256];

desc = fopen("/dev/rasram", O_WONLY);
write(desc, &write_ch[0], 256);
close(desc);
/*********************************************************/

この時心配なのが、Prog1のreadとProg2writeが同時に発生した場合、プログラムエラー
にならないかということです。
openの状態がわかればいいのですが、別プロセスなのでdescの値も別になるでしょうし。
今までこのようなプログラムを作成したことのある方はいますでしょうか?

A 回答 (3件)

ANo.2さんの回答の排他制御が普通だと思いますが、逆の両方で使うモードもありますので調べてみてください。



shared mode のオープンで私が知っているのは _fsopen() ですが(だったと思いますが、間違いかも)、お使いのC/C++でサポートされているか調べてみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
fsopenは初めて知りましたので調べてみたいと思います。

お礼日時:2011/07/25 08:49

>>この時心配なのが、Prog1のreadとProg2writeが同時に発生した場合、プログラムエラー


にならないかということです。

定石として、そういう場合、排他制御の仕組みをプログラムに組み込みます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
排他制御で調べてみたのですが、flockを使用すればよいのかな?と思いました。
もう少し調べてみようと思います。

お礼日時:2011/07/25 08:48

プロセス間通信として利用したいのなら、FIFOを利用するのでは目的は達成されませんか?

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
FIFO調べてみますね。

お礼日時:2011/07/25 08:47

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