在Linux平台上编写一个C语言应用程序,采用多进程的方法,实现下列两个任务并行: 1)每隔1秒在屏幕上打印出自己的中文姓名; 2)如果在键盘上按1键,打印出自己的学号;如果按2键,打印出自己的班级;如果按q键,则打印停止,程序结束;按其余键无效。
时间: 2023-11-19 11:04:55 浏览: 94
实现多按键同时按下处理程序C语言
5星 · 资源好评率100%
下面是一个简单的实现,利用了 Linux 下的进程和信号处理机制:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
#define NAME "你的姓名"
#define ID "你的学号"
#define CLASS "你的班级"
void print_name(int signum) {
printf("%s\n", NAME);
}
void print_info(int signum) {
char c = getchar();
switch (c) {
case '1':
printf("%s\n", ID);
break;
case '2':
printf("%s\n", CLASS);
break;
case 'q':
exit(0);
default:
break;
}
}
int main() {
pid_t pid;
pid = fork();
if (pid > 0) { // 父进程
while (1) {
sleep(1);
kill(pid, SIGUSR1); // 向子进程发送信号
}
} else if (pid == 0) { // 子进程
signal(SIGUSR1, print_name); // 注册信号处理函数
signal(SIGUSR2, print_info);
while (1) {
getchar();
}
} else {
perror("fork");
exit(1);
}
return 0;
}
```
父进程每隔一秒向子进程发送 `SIGUSR1` 信号,子进程接收到该信号后就调用 `print_name` 函数打印自己的姓名。
同时,子进程还注册了 `SIGUSR2` 信号处理函数 `print_info`,该函数会根据用户在键盘上输入的不同按键进行不同的操作。如果按下了 `1` 键,则输出学号;如果按下了 `2` 键,则输出班级;如果按下了 `q` 键,则退出程序;如果按下了其他键,则不做任何操作。
需要注意的是,父进程和子进程之间需要通过信号来通信,因此我们需要使用 Linux 下的信号处理机制,具体可以参考 `signal` 函数的使用。同时,由于父进程和子进程是并行执行的,因此我们需要使用 `fork` 函数来创建子进程。
阅读全文