所以我開始瞭解流程是如何工作的並且編寫了一些簡單的代碼。爲什麼進程子執行一些意外的行?
#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