編集:これがコード全体です。ルーマニア語のコメントは無視してください。また、2つまたは3つの名前はルーマニア語から翻訳されていません:http://pastebin.com/JjtayvXX
OSの基本を学ぼうとしていますが、現在はウィンドウの下で名前付きパイプを使用していますが、何が問題なのかわかりません。
正直なところ、私は友人が行った例に取り組んでいますが、彼は私と同じくらい悪いです。hiのプログラムは機能しますが(何か他のことをしますが)、彼は何も説明できません。おそらくどこかからコピーされただけですが、それでも...重要ではありません。 。
サーバーはクライアントからメッセージを受信し、最大数と最小数を返します。
Server.c:
#include "windows.h"
#include "stdio.h"
struct Msg {
int numbers[20];
int length;
};
...
int main () {
HANDLE inputPipe, outputPipe;
Msg msg;
while (true) {
inputPipe = CreateNamedPipe ("\\\\.\\pipe\\Client2Server",
PIPE_ACCESS_INBOUND,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
0, //Numb of output bytes
sizeof(Msg), // Numb of input bytes
0, // Wait forever
NULL); // Don't know how to use security
ConnectNamedPipe (inputPipe,NULL);
// Here is where the server dies
ReadFile (inputPipe, &msg,sizeof(Msg),NULL,NULL);
今Client.c:
struct Msg {
int numbers[20];
int length;
};
int main () {
HANDLE outputPipe, inputPipe;
Msg msg;
// @misc: read data from keyboard, create msg
outputPipe = CreateFile ("\\\\.\\pipe\\Client2Server",
GENERIC_WRITE,
FILE_SHARE_READ, // * comment after code
NULL, // again, I know nothing about security attributes
CREATE_ALWAYS, // either create or overwrite
0,
NULL);
// Here is where it dies
WriteFile (outputPipe, &msg, sizeof(Msg), NULL, NULL);
アクセス違反の書き込み場所0x00000000を取得します。理由はわかりません。
- このプロセスは書き込みのみを行い、別のプロセス(サーバー)は読み取りのみを行うようにしたいと思います。大丈夫
FILE_SHARE_READ
ですか?
また、CreationDisposition / FlagsAndAttributes(の最後の2つのパラメーター)をいじる方法がわかりませんCreateFile
。大丈夫ですか?