리눅스 프로그래밍 질문 있습니다.
공유메모리를 이용한 부모,자식 프로세스간의 통신입니다.
자식을 공유메모리에 현제 시각을 쓰고, 부모는 그걸 읽어서 출력하는 건데
뭐가 잘못된건지 부모프로세스 실행 부분이 실행되질 않습니다.
아예 조건문 if(pid > 0)
부분이 실행 안되는거 같기도 하고,,
공유메모리를 설정하고 나서 fork() 함수 쓰면 안되는 건지..
다른때는 fork()함수 써서 부모, 자식 임무 분담해서 처리하는거 됐는데,,
답변 부탁드립니다.
#include
#include
#include
#include
#include
#include
#include
#include
#define KEY 0x10
#define PERM 0660
#define SIZE 100
char* memptr;
void alarm_handler()
{
printf("%s", memptr);
}
int main(void)
{
int pid;
int shmid;
time_t timerid;
system("ipcs -m");
if((shmid = shmget(KEY, SIZE, PERM | IPC_CREAT | IPC_EXCL)) < 0)
{
perror("shmget");
exit(1);
}
if((memptr = shmat(shmid, (char*)0, 0)) == (char*)(-1))
{
perror("shmat");
exit(1);
}
pid = fork();
if(pid == -1)
{
perror("failed to fork");
exit(1);
}
if(pid == 0)
{
timerid = time(NULL);
strcpy(memptr, ctime(&timerid));
if(kill(getppid(), SIGINT) == -1)
{
perror("Failed to send SIGALRM");
exit(1);
}
return 0;
}
if(pid > 0) // 부모 프로세스 실행부분을 그냥 지나쳐 버림 ㅠ.ㅜ
{
signal(SIGINT, alarm_handler);
}
if(pid != wait(NULL)) // 여기 부터도 부모가 처리해야 하는 부분이지만 실행 안됨. 밑에까지 쭉~
{ 실행 안됌
perror("Parent failed to wait");
exit(1);
}
if(shmdt(memptr) < 0)
{
perror("shmdt");
exit(1);
}
if(shmctl(shmid, IPC_RMID, (struct shmid_ds*)0) < 0)
{
perror("shmctl");
exit(1);
}
system("ipcs -m");
return 0;
}

