1#include <stdio.h>
2#include <stdlib.h>
3#include <unistd.h>
4#include <error.h>
5#include <errno.h>
6#include <sys/wait.h>
7
8void __attribute_noinline__ noop (void);
9
10#define NR 2 /* Exit code of the child. */
11
12int
13main (void)
14{
15 pid_t pid;
16 int status;
17
18 printf (format: "Before vfork\n");
19 fflush (stdout);
20 pid = vfork ();
21 if (pid == 0)
22 {
23 /* This will clobber the return pc from vfork in the parent on
24 machines where it is stored on the stack, if vfork wasn't
25 implemented correctly, */
26 noop ();
27 _exit (NR);
28 }
29 else if (pid < 0)
30 error (status: 1, errno, format: "vfork");
31 printf (format: "After vfork (parent)\n");
32 if (waitpid (pid: 0, stat_loc: &status, options: 0) != pid
33 || !WIFEXITED (status) || WEXITSTATUS (status) != NR)
34 exit (1);
35
36 return 0;
37}
38
39void
40noop (void)
41{
42}
43

source code of glibc/posix/test-vfork.c