[問題] 關於 vfork 的問題

看板C_and_CPP (C/C++)作者 (真人)時間16年前 (2009/08/15 11:41), 編輯推噓0(008)
留言8則, 2人參與, 最新討論串1/1
最近在自學一些有關 fork 的知識, 以下是抄來的例子 /* b01.c */ #include <sys/types.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> int main(void) { pid_t pid; pid = vfork(); if (pid == 0) { for (int j = 0; j < 10; j++) { printf("child: %d\n", j); sleep(1); } _exit(0); /* Note that we do not use exit() */ } else if (pid > 0) { for (int i = 0; i < 10; i++) { printf("parent: %d\n", i); sleep(1); } exit(0); } else { fprintf(stderr, "can't fork, error %d\n", errno); exit(1); } } /* --- */ $gcc b01.c -g -o b01.out -std=c99 b01.c: In function 'main': b01.c:12: warning: implicit declaration of function 'vfork' 我是在 Fedora 11的環境, 就我在別的地方看到的 vfork 好像定義在 unistd.h 可是我只找到一行 extern __pid_t vfork (void) __THROW; 至少在 /usr/include 我都沒找到其他 .h 的檔有 vfork 可是 b01.out 還是可以執行,結果也對, 請問, 上面那個 warning 是怎麼回事 ? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 71.198.44.240

08/15 12:20, , 1F
不知道,拿掉 -std=c99 或改用 --std=gnu99 試試看。
08/15 12:20, 1F

08/15 12:20, , 2F
man vfork 寫是哪個 header 就是哪個 header 了。
08/15 12:20, 2F

08/15 12:21, , 3F
第一行打錯,-std=gnu99 才對,多打一個 - 。
08/15 12:21, 3F

08/15 12:32, , 4F
感謝樓上, gnu99可以,這兩者有很大的不同嗎?
08/15 12:32, 4F

08/15 12:39, , 5F
man vfork出來的是sys/types.h和unistd.h
08/15 12:39, 5F

08/15 14:02, , 6F
gnu99 除了 c99 標準外還會含進一些 GNU extensions,
08/15 14:02, 6F

08/15 14:02, , 7F
有一些 predefined macro 也不一樣,影響一連串 #ifdef 的
08/15 14:02, 7F

08/15 14:02, , 8F
條件式編譯行為,所以要解釋原因就說來話長了。
08/15 14:02, 8F
文章代碼(AID): #1AXYv_ML (C_and_CPP)
文章代碼(AID): #1AXYv_ML (C_and_CPP)