所以我开始了解流程是如何工作的并且编写了一些简单的代码。为什么进程子执行一些意外的行?
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int SemId;
void SemGet(int n)
{
SemId = semget(IPC_PRIVATE, n, 0600);
if (SemId == -1) {
exit(1);
}
}
int SemSetVal(int SemNum, int SemVal)
{
return semctl(SemId, SemNum, SETVAL, SemVal);
}
int SemOp(int SemNum, int SemOp)
{
struct sembuf SemBuf;
SemBuf.sem_num = SemNum;
SemBuf.sem_op = SemOp;
SemBuf.sem_flg = 0;
return semop(SemId, & SemBuf, 1);
}
void SemRemove(void)
{
(void) semctl(SemId, 0, IPC_RMID, 0);
}
void child(int vchild) {
printf("\nChild %d", vchild);
return;
}
int main(int argc, char** argv) {
printf("\nHeeeyoooo!");
if (fork() == 0) {
child(1);
exit(0);
}
(void) wait(NULL);
printf("\nParent.");
return 0;
}
和我所得到的输出是
Heeeyoooo!
Child 1Heeeyoooo!
Parent.
Process returned 0 (0x0) execution time : 0.001 s
Press ENTER to continue.
为什么我会收到 “heyooo” 两次? 我好像孩子正在恢复到主,而不是由出口遭到停...
使用'printf(“Child%d \ n”,child);' – 2014-12-13 14:02:09
那不是问题 – ditoslav 2014-12-13 14:06:19
好吧,'\ C'应该会产生错误。 'exit()'应该在'stdlib.h'中。 'fork()'在'unistd.h'中。你在做什么呢 ? :-) – 2014-12-13 14:23:37