作者indept (真人)
看板C_and_CPP
標題[問題] 關於 vfork 的問題
時間Sat Aug 15 11:41:50 2009
最近在自學一些有關 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