![](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ランキング
-
#define中の#のエスケープ
-
C++で、テキストファイルを一行...
-
enumの値から定義名を文字列化...
-
wstringの主力
-
switch文のエラーについて
-
2次元vectorのerase?
-
C言語のポインターで詰まっている
-
VS2019でofstreamが未定義になる
-
構文エラーが出ているのですが...
-
string型のフォーマット書式指...
-
VC++で文字列から任意の文字を...
-
構造体配列のvectorへの変換と...
-
findnext();について
-
C++でのeの近似値の求め方
-
プログラミング言語Cとプログラ...
-
CStringとString
-
ヘッダーファイルがインクルー...
-
指定した文字を削除したい
-
#include "fstream.h"
-
boost::regexで、日本語に利用...
マンスリーランキングこのカテゴリの人気マンスリー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が未定義になる
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報