apueにおけるvfork()関数のコンパイルエラー解決


vfork()のサンプルコードをコンパイルすると、常に次のようにエラーが発生します.
ex_8_2.c: In functionmath’:
ex_8_2.c:22:12: warning: implicit declaration of functionvfork’ [-Wimplicit-function-declaration]
  if((pid = vfork()) < 0)
            ^

vfork()関数は/usr/include/unistdで宣言されていることがわかります.hファイルには、サンプルコードにもヘッダファイルが含まれていますが、コンパイル時にvfork()関数が宣言されていません.unistdを表示します.hのコードは、vfork()の宣言コードが条件コンパイル命令に存在することを発見し、以下のようにする.
#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
    || defined __USE_MISC
extern __pid_t vfork (void) __THROW;
#endif /* Use misc or XPG < 7. */

私のシステムはUbuntu 16.04で、このシステムの下でこの条件のコンパイルは通過しないようで、そのためincludeのこのヘッダファイルでも役に立ちません.この条件をコンパイルして削除し、直接:
extern __pid_t vfork (void) __THROW;

そしてunistd.h/usr/local/include/パスにコピーし(コピーしないでコンパイルエラー、このパスと/usr/includeがCプログラムコンパイル時<>ヘッダファイル検索のデフォルトパス)、さらに前のサンプルコードをコンパイルし、コンパイルします.