리눅스 프로그래밍 질문 있습니다.

케르엠마의 이미지

공유메모리를 이용한 부모,자식 프로세스간의 통신입니다.

자식을 공유메모리에 현제 시각을 쓰고, 부모는 그걸 읽어서 출력하는 건데

뭐가 잘못된건지 부모프로세스 실행 부분이 실행되질 않습니다.

아예 조건문 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;
}