- Community Home
- >
- HPE Community, Japan
- >
- Legacy
- >
- Linux
- >
- msgrcvに渡すバッファサイズ
Linux
1758568
メンバー
1908
オンライン
108872
解決策
フォーラム
カテゴリ
Company
Local Language
戻る
フォーラム
ディスカッションボード
フォーラム
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
ディスカッションボード
ディスカッションボード
ディスカッションボード
フォーラム
ディスカッションボード
戻る
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
ブログ
情報
コミュニティ言語
言語
フォーラム
ブログ
トピックオプション
- RSS フィードを購読する
- トピックを新着としてマーク
- トピックを既読としてマーク
- このトピックを現在のユーザーにフロートします
- ブックマーク
- 購読
- 印刷用ページ
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-08-2007 07:25 PM
05-08-2007 07:25 PM
msgrcvに渡すバッファサイズ
初めて投稿させて頂きます。
以下のソースコードをRedHat Linux ES3 update3 上のGCCで
コンパイルして実行すると、ちゃんとメッセージ受信を待つ
ことができるのですが、msgrcvの第3引数の65519を65520に
すると、引数が不正ということでmsgrcvが失敗してしまいます
カーネルのパラメータは
/proc/sys/kernel/msgmnb が 65535
/proc/sys/kernel/msgmax が 65535
になっており、引数としては65535まで渡せると考えていました。
なにかご存じの方がいらっしゃれば、コメントをいただけると
助かります
#include
#include
#include
#include
int main() {
int key=12345;
int msgid;
int iret;
int ii=1;
char buff;
msgid=msgget(key, IPC_CREAT|0666);
iret=msgrcv(msgid, buff,
65519, ii, 0);
if (iret<0) {
perror("msgrcv");
}
return 0;
}
以下のソースコードをRedHat Linux ES3 update3 上のGCCで
コンパイルして実行すると、ちゃんとメッセージ受信を待つ
ことができるのですが、msgrcvの第3引数の65519を65520に
すると、引数が不正ということでmsgrcvが失敗してしまいます
カーネルのパラメータは
/proc/sys/kernel/msgmnb が 65535
/proc/sys/kernel/msgmax が 65535
になっており、引数としては65535まで渡せると考えていました。
なにかご存じの方がいらっしゃれば、コメントをいただけると
助かります
#include
#include
#include
#include
int main() {
int key=12345;
int msgid;
int iret;
int ii=1;
char buff;
msgid=msgget(key, IPC_CREAT|0666);
iret=msgrcv(msgid, buff,
65519, ii, 0);
if (iret<0) {
perror("msgrcv");
}
return 0;
}
2件の返信2
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-09-2007 10:57 AM
05-09-2007 10:57 AM
msgrcvに渡すバッファサイズ
ES4環境がないため正確なことは言えませんが、
受信用エリアbuffの使い方が誤っていませんか?
受信用エリアbuffはchar型ではなく、
struct msgbuf型のはずです。
「struct msgbuf {
long mtype;
char mtext; /* message data */
};」
smgrcvは
「ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp,int msgflg);」
なので、とりあえずmtypeの値等をみなおしてみてはいかがですか?
受信用エリアbuffの使い方が誤っていませんか?
受信用エリアbuffはchar型ではなく、
struct msgbuf型のはずです。
「struct msgbuf {
long mtype;
char mtext
};」
smgrcvは
「ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp,int msgflg);」
なので、とりあえずmtypeの値等をみなおしてみてはいかがですか?
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-09-2007 12:04 PM
05-09-2007 12:04 PM
msgrcvに渡すバッファサイズ
コメントありがとうございます
以下の様にちょっと修正してみました
やはりdefineした65519を65520にすると動きません
カーネルのパラメータに設定した65535に
mtypeが含まれているとしても65520で失敗する理由がわからないのです
#include
#include
#include
#include
#define MSG_SIZE 65519
int main() {
int key=12345;
int msgid;
int iret;
long msgtyp=1;
struct msgbuf {
long mtype;
char mtext; /* message data */
}buff;
msgid=msgget(key, IPC_CREAT|0666);
iret=msgrcv(msgid, &buff,
MSG_SIZE, msgtyp, 0);
if (iret<0) {
perror("msgrcv");
}
return 0;
}
以下の様にちょっと修正してみました
やはりdefineした65519を65520にすると動きません
カーネルのパラメータに設定した65535に
mtypeが含まれているとしても65520で失敗する理由がわからないのです
#include
#include
#include
#include
#define MSG_SIZE 65519
int main() {
int key=12345;
int msgid;
int iret;
long msgtyp=1;
struct msgbuf {
long mtype;
char mtext; /* message data */
}buff;
msgid=msgget(key, IPC_CREAT|0666);
iret=msgrcv(msgid, &buff,
MSG_SIZE, msgtyp, 0);
if (iret<0) {
perror("msgrcv");
}
return 0;
}
上記の意見は、Hewlett Packard Enterpriseではなく、著者の個人的な意見です。 このサイトを使用することで、利用規約と参加規約に同意したことになります 。
© Copyright 2024 Hewlett Packard Enterprise Development LP