编写程序,使用fork()产生两个子进程,首先显示一下两个子进程及父进 程的进程标识符,然后让父进程显示1~26个数字,子进程1显示26个大写字母, 子进程2显示26个小写字母。让大小写字母及数字是混合交错输出的。
时间: 2024-03-02 21:48:51 浏览: 76
fork创建多个子进程
4星 · 用户满意度95%
好的,以下是你需要的代码:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
void print_uppercase() {
for (char c = 'A'; c <= 'Z'; c++) {
printf("%c", c);
fflush(stdout); // 刷新输出缓冲区
usleep(50000); // 等待 50ms
}
}
void print_lowercase() {
for (char c = 'a'; c <= 'z'; c++) {
printf("%c", c);
fflush(stdout); // 刷新输出缓冲区
usleep(50000); // 等待 50ms
}
}
int main() {
pid_t pid1, pid2;
// 创建第一个子进程
pid1 = fork();
if (pid1 < 0) {
printf("Error creating child process 1!\n");
return 1;
} else if (pid1 == 0) {
// 子进程 1
printf("Child process 1 (PID %d) created!\n", getpid());
print_uppercase();
} else {
// 父进程
// 创建第二个子进程
pid2 = fork();
if (pid2 < 0) {
printf("Error creating child process 2!\n");
return 1;
} else if (pid2 == 0) {
// 子进程 2
printf("Child process 2 (PID %d) created!\n", getpid());
print_lowercase();
} else {
// 父进程
printf("Parent process (PID %d) created!\n", getpid());
// 等待两个子进程结束
wait(NULL);
wait(NULL);
printf("\n");
for (int i = 1; i <= 26; i++) {
printf("%d", i);
fflush(stdout); // 刷新输出缓冲区
usleep(50000); // 等待 50ms
}
}
}
return 0;
}
```
这个程序使用了 `fork()` 函数创建了两个子进程,一个子进程用于输出大写字母,另一个用于输出小写字母。父进程负责输出数字,并且在两个子进程结束后才开始输出数字。
注意到在每次输出字符后,都使用了 `fflush(stdout)` 刷新了输出缓冲区,这是因为在输出字符后,输出结果并不会立刻显示在终端上,而是会先存储到缓冲区中,直到缓冲区满了或者使用 `fflush()` 函数刷新缓冲区后才会显示出来。为了让输出的字母和数字能够交错输出,我们在输出每个字符后都使用了 `usleep(50000)` 函数暂停了 50ms,这样就能够实现混合交错输出的效果。
阅读全文