Parent directory
ap-shell.c
parent-child.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
static void die(const char *s) { perror(s); exit(1); }
int main()
{
char buf[100];
pid_t pid;
int status;
printf("AP> ");
while (fgets(buf, sizeof(buf), stdin) != NULL) {
if (buf[strlen(buf) - 1] == '\n') {
buf[strlen(buf) - 1] = 0; // replace newline with '\0'
}
pid = fork();
if (pid < 0) {
die("fork error");
} else if (pid == 0) { // child process
char *argv[] = { buf, NULL };
execv(argv[0], argv);
// or alternatively:
// execl(buf, buf, (char *)0);
die("execl failed");
} else { // parent process
if (waitpid(pid, &status, 0) != pid) {
die("waitpid failed");
}
}
printf("AP> ");
}
}
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
pid_t p;
p = fork();
if (p > 0) {
for (i = 0; i < 10; i++) {
printf("Listen to me\n");
sleep(1);
}
printf("I give up...\n");
return 0;
}
else if (p == 0) {
for (i = 0; i < 10; i++) {
printf("No way\n");
sleep(1);
}
printf("Whatever.\n");
return 1;
}
else {
perror("fork failed");
return -1;
}
}