我有这个代码:
#include <stdio.h>
#include <unistd.h>
#include <semaphore.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(){
int segment_n;
int segment_sem;
int *shared_n;
sem_t *shared_sem;
int pid_int;
pid_t pid;
segment_n = shmget(IPC_PRIVATE, sizeof(int), S_IRUSR | S_IWUSR);
segment_sem = shmget(IPC_PRIVATE, sizeof(sem_t), S_IRUSR | S_IWUSR);
shared_n = (int *)shmat(segment_n, NULL, 0);
shared_sem = (sem_t *)shmat(segment_sem, NULL, 0);
sem_init(shared_sem, 0, 0);
scanf("%d", shared_n);
pid = fork();
if(pid < 0){
return 1;
} else if(pid == 0){
pid_int = (int)getpid();
if(pid_int > *shared_n){
*shared_n = 1;
}else if(pid_int == *shared_n){
*shared_n = 0;
} else {
*shared_n = -1;
}
sem_post(shared_sem);
return 0;
} else {
sem_wait(shared_sem);
printf("returns: %d\n", *shared_n);
return 0;
}
return 0;
}
该程序创建一个子进程,验证 shared_n 中的数字是否是他自己的 pid 的 >、< 或 ==,而不是分别在 shared_n 中写入 1、-1 或 0。
问题是当我编译它时,它给了我这个输出: https ://dl.dropboxusercontent.com/u/6701675/informatica/Istantanea%20-%2020062013%20-%2013%3A49%3A14.png
提前感谢您的帮助!
洛伦佐