#include #include #include #include #include #include // 命名信号实例 void printer(char *msg) { while (*msg) { printf("%c", *msg++); // 打印字符 fflush(stdout); // 刷新控制台 sleep(1); } } int main(int argc, char const *argv[]) { // 命名信号 sem_t *sem1 = sem_open("mysem1", O_CREAT | O_RDWR, 0644, 1); sem_t *sem2 = sem_open("mysem2", O_CREAT | O_RDWR, 0644, 0); int pid = fork(); if (pid == 0) // 子进程 { sem_wait(sem1); printer("disen666"); sem_post(sem2); _exit(0); } else if (pid > 0) // 父进程 { sem_wait(sem2); printer("jack888"); sem_post(sem1); wait(NULL); // 等待子进程退出 printf("\n---over---\n"); sem_close(sem1); // 关闭信号量 sem_close(sem2); // 关闭信号量 sem_unlink("mysem1"); // 删除信号量文件 sem_unlink("mysem2"); // 删除信号量文件 } return 0; }