운영 체제 관련 숙제가 있습니다. 이 숙제에는 두 가지 프로그램, 즉 "get"이라는 클라이언트 프로그램과 "iserv"라는 서버 프로그램이 구현됩니다. 서버는 다중 프로세스 프로그램이됩니다. POSIX 메시지 대기열은 프로세스 간 통신에 사용됩니다. 서버는 다음과 같이 시작됩니다. iserv 여기서는 서버가 작성하는 메시지 대기열의 이름입니다. 정수가 들어있는 텍스트 파일의 이름입니다.메이크 파일에서 POSIX Message Queue 이름을 사용하는 방법
내 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"로 작성됩니다. 내가 make 명령이 메이크 파일을 실행하면
iserv:iserv.c
gcc -o iserv serverqueue infile.txt -lrt
clean:
rm -r *.o iserv
, 나는 serverqueue를 얻을 : 그런 다음, 내 메이크 파일을 만들어 한 해당 파일 또는 디렉터리 오류가 발생했습니다. 서버가 어디에서 어떻게 시작될 것인가? 어디가 잘못 됐어?
제발 도와주세요, 감사합니다!
죄송합니다. 새 사용자이기 때문에 일부 단어가 누락되었습니다. – Begumm
이러한 누락 된 부분을 다시 작성하고 있습니다. 서버는 다음과 같이 시작됩니다. iserv. 여기에서 은 서버가 작성하는 메시지 대기열의 이름입니다. (나는 서버 큐로 이름을 만들었다). 그러나, 나는 어디에서 어떻게 메시지 큐 이름을 makefile에 넣을지 모른다. 제발 도와주세요. –
Begumm
gcc 명령에서 infile.txt의 목적은 무엇입니까? – PhillipD