![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
msend.c,mrecv.cを参考にして)10秒ごとにメッセージで
「10秒経過」を送信するプログラムを作成せよ。mrecv.cで受信を確認する。
msend.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
int main() {
struct msgbuf {
long mtype;
char mtext[256];
};
char line[256];
int msgid;
key_t msgkey;
struct msgbuf msgdata, *p;
p=&msgdata;
printf("Enter message: ");
fflush(stdout);
fgets(line,sizeof(line),stdin);
if (sscanf(line,"%[^\n]",p->mtext)>0) {
p->mtype=getpid();
msgkey=ftok("mrecv",'a');
msgid=msgget(msgkey,IPC_CREAT|0666);
msgsnd(msgid,p,sizeof(p->mtext),0);
}
return EXIT_SUCCESS;
}
mrecv.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int main() {
struct msgbuf {
long mtype;
char mtext[256];
};
int msgid;
key_t msgkey;
struct msgbuf msgdata, *p;
p=&msgdata;
msgkey=ftok("mrecv",'a');
msgid=msgget(msgkey,IPC_CREAT|0666);
while (1) {
msgrcv(msgid,p,sizeof(p->mtext),0,0);
printf("message received from %ld\n%s\n",p->mtype,p->mtext);
}
return EXIT_SUCCESS;
}
以下のプログラムに4行追加するんですが(2)(3)(4)がわかりません。教えてください
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
int main() {
struct msgbuf {
long mtype;
char mtext[256];
};
char line[256] = "10 seconds has passed!!";
int msgid;
key_t msgkey;
struct msgbuf msgdata, *p;
ここに4行追加して下さい。
(1)鍵を作る(mrecv.cと同じファイル名から作る)。
msgid=msgget(msgkey,IPC_CREAT|0666);
(2)msggetシステムコールを行い、msgidを得る。
(3)msgdataのアドレスをポインタ変数pに入れる。
(4)msgdataのメンバmtypeにプロセスidを入れる。
while (1) {
sleep(10);
sscanf(line,"%[^\n]",p->mtext);
msgsnd(msgid,p,sizeof(p->mtext),0);
}
return EXIT_SUCCESS;
}
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.1ベストアンサー
- 回答日時:
以下のようにしてください。
---------------------------------------
//ここに4行追加して下さい。
//(1)鍵を作る(mrecv.cと同じファイル名から作る)。
msgkey=ftok("mrecv",'a');
//(2)msggetシステムコールを行い、msgidを得る。
msgid=msgget(msgkey,IPC_CREAT|0666);
//(3)msgdataのアドレスをポインタ変数pに入れる。
p = &msgdata;
//(4)msgdataのメンバmtypeにプロセスidを入れる。
p->mtype=getpid();
---------------------------------------
以下、mrecvの実行結果です。
message received from 7077
10 seconds has passed!!
message received from 7077
10 seconds has passed!!
message received from 7077
10 seconds has passed!!
message received from 7077
10 seconds has passed!!
実行環境は以下の通りです
CentOS release 6.3 (Final)
gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
switch文のエラーについて
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
C++ 平均値、最大値と最小値の...
-
構造体配列のvectorへの変換と...
-
C++でShowCursorを使いたい。
-
構文エラーが出ているのですが...
-
#defineの使い方について
-
指定した文字を削除したい
-
VC++ iostreamの不具合(?)
-
VxWorks 6.4ソケット接続につい...
-
VS2019でofstreamが未定義になる
-
snprintfが使用できない。
-
2重の(?)の#include
-
c++のvirtual関数および継承に...
-
構造体に決められた文字列を入...
-
プログラミング
-
opencvを使って画像比較
-
C言語からgnuplot呼び出し
-
atlbase.h と afxwin.hの同時定義
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
switch文のエラーについて
-
enumの値から定義名を文字列化...
-
VC++で文字列から任意の文字を...
-
なぜ、C++の標準ヘッダをインク...
-
空ENTERの判別
-
std::wstringのメモリリークに...
-
C言語からgnuplot呼び出し
-
リモートデスクトップの接続元I...
-
JPEGやPNGが読めるLoadImage関数
-
このプログラミング誰か教えて...
-
プログラミング
-
#include "fstream.h"
-
C++での <iostream.h>と<iostre...
-
std::map の const 修飾について
-
構造体配列のvectorへの変換と...
-
#defineの使い方について
-
VS2019でofstreamが未定義になる
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報