#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid1, pid2;
pid1 = fork();
if (pid1 < 0) {
fprintf(stderr, "Fork Failed\n");
return 1;
} else if (pid1 == 0) {
lockf(1, 1, 0);
printf("饿\n");
fflush(stdout);
lockf(1, 0, 0);
return 0;
}
// 父进程先等子进程1结束,再创建子进程2
waitpid(pid1, NULL, 0);
pid2 = fork();
if (pid2 < 0) {
fprintf(stderr, "Fork Failed\n");
return 1;
} else if (pid2 == 0) {
lockf(1, 1, 0);
printf("吃饭\n");
fflush(stdout);
lockf(1, 0, 0);
return 0;
}
// 再等子进程2结束
waitpid(pid2, NULL, 0);
lockf(1, 1, 0);
printf("饿就吃饭\n");
fflush(stdout);
lockf(1, 0, 0);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KCmludCBtYWluKCkgewogICAgcGlkX3QgcGlkMSwgcGlkMjsKCiAgICBwaWQxID0gZm9yaygpOwogICAgaWYgKHBpZDEgPCAwKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJGb3JrIEZhaWxlZFxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9IGVsc2UgaWYgKHBpZDEgPT0gMCkgewogICAgICAgIGxvY2tmKDEsIDEsIDApOwogICAgICAgIHByaW50Zigi6aW/XG4iKTsKICAgICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICAgICBsb2NrZigxLCAwLCAwKTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvLyDniLbov5vnqIvlhYjnrYnlrZDov5vnqIsx57uT5p2f77yM5YaN5Yib5bu65a2Q6L+b56iLMgogICAgd2FpdHBpZChwaWQxLCBOVUxMLCAwKTsKCiAgICBwaWQyID0gZm9yaygpOwogICAgaWYgKHBpZDIgPCAwKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJGb3JrIEZhaWxlZFxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9IGVsc2UgaWYgKHBpZDIgPT0gMCkgewogICAgICAgIGxvY2tmKDEsIDEsIDApOwogICAgICAgIHByaW50Zigi5ZCD6aWtXG4iKTsKICAgICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICAgICBsb2NrZigxLCAwLCAwKTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvLyDlho3nrYnlrZDov5vnqIsy57uT5p2fCiAgICB3YWl0cGlkKHBpZDIsIE5VTEwsIDApOwoKICAgIGxvY2tmKDEsIDEsIDApOwogICAgcHJpbnRmKCLppb/lsLHlkIPppa1cbiIpOwogICAgZmZsdXNoKHN0ZG91dCk7CiAgICBsb2NrZigxLCAwLCAwKTsKCiAgICByZXR1cm4gMDsKfQ==