看板 C_and_CPP 關於我們 聯絡資訊
最近在自學一些有關 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
tinlans:不知道,拿掉 -std=c99 或改用 --std=gnu99 試試看。 08/15 12:20
tinlans:man vfork 寫是哪個 header 就是哪個 header 了。 08/15 12:20
tinlans:第一行打錯,-std=gnu99 才對,多打一個 - 。 08/15 12:21
indept:感謝樓上, gnu99可以,這兩者有很大的不同嗎? 08/15 12:32
indept:man vfork出來的是sys/types.h和unistd.h 08/15 12:39
tinlans:gnu99 除了 c99 標準外還會含進一些 GNU extensions, 08/15 14:02
tinlans:有一些 predefined macro 也不一樣,影響一連串 #ifdef 的 08/15 14:02
tinlans:條件式編譯行為,所以要解釋原因就說來話長了。 08/15 14:02