0

オペレーティング システム コースに関連する宿題があります。この宿題では、「get」と呼ばれるクライアント プログラムと「iserv」と呼ばれるサーバー プログラムの 2 つのプログラムが実装されます。サーバーはマルチプロセス プログラムになります。POSIX メッセージ キューは、プロセス間通信に使用されます。サーバーは次のように起動されます: iserv ここで、 はサーバーによって作成されるメッセージ キューの名前です。整数を含むテキスト ファイルの名前です。

私の iserv.c プログラム: (未完成)

#include <linux/types.h>
#include <linux/unistd.h>
#include <stdio.h>
#include <mqueue.h>
#include <stdlib.h>
#include <linux/string.h>
#include <linux/fcntl.h>
#include <linux/errno.h>
#include <linux/wait.h>
#include <msg.h>

int main(int argc , char *argv[])
{
pid_t apid1;
FILE *fp;
mqd_t mq;
const char *msgqueue = "/serverqueue";
int oflag = (O_RDWR|O_CREAT);
mode_t mode = (S_IRUSR|S_IWUSR);
struct mq_attr *attr = NULL;

if(argc != 1)
{
    printf("wrong number of arguments");
    exit(1);
}
//create message queue
mq = mq_open(msgqueue ,oflag , mode , attr);
if(mq==-1)
{
    perror("can not open msg queue\n");
    exit(1);
}
printf("mq opened , mq id = %d\n" , (int) mq);

//create child process
apid1 = fork();
if(apid1 < 0)
{
    perror("main():");
    exit(1);
}
if(apid1 == 0)
{
    printf("this is the first child, pid = %d\n", (int) getpid());
    fflush(stdout);
}
}

コードが示すように、メッセージ キューは「serverqueue」という名前で作成されます。次に、メイクファイルを次のように作成しました。

iserv:iserv.c
     gcc -o iserv serverqueue infile.txt -lrt
clean:
     rm -r *.o iserv

この makefile を make コマンドで実行すると、serverqueue: No such file or directory エラーが発生します。サーバーは iserv 行でどこでどのように起動されますか? どこが間違っていますか?

助けてください、ありがとう!

4

1 に答える 1

0

あなたのメイクファイルは私には意味がありません。-o は、コンパイル済み出力ファイルの名前を指定します。ソース ファイルの名前が iserv.c で、実行可能ファイルの名前を serverqueue にしたい場合は、コンパイルします。

gcc -o serverqueue iserv.c -lrt

メイクファイルで、ソース ファイルの .c 拡張子を忘れました。

infile.txt を含めた理由がわかりません。

あなたのコメントに従って編集:

宿題では、次のようにサーバーを起動することが望まれます: iserv 。servq は、サーバーによって作成されるメッセージ キューの名前です。I が true の場合、コード内でサーバー キューとして作成されます。また、inputfile は、多数の正の整数を含むテキスト ファイルの名前です。

いいえ、ステートメントiserv <servq> <inputfile>はコンパイルとは何の関係もありません。これは、プログラムがコンパイルされた後のプログラムの使用方法です。プログラムの名前は iserv であるため、次のようにコードをコンパイルする必要があります。

gcc -o iserv iserv.c -lrt

プログラムタイプを開始するには

./iserv <servq> <inputfile>

serverqueue はどこに<servq>あり、infile.txt になります<inputfile>

于 2013-10-18T15:45:50.707 に答える