在Linux平台上编写一个C语言应用程序,采用多进程的方法,实现下列两个任务并行: 1)每隔1秒在屏幕上打印出自己的中文姓名; 2)如果在键盘上按1键,打印出自己的学号;如果按2键,打印出自己的班级;如果按q键,则打印停止,程序结束;按其余键无效。
时间: 2023-06-23 15:10:15 浏览: 57
下面是一个简单的实现,使用了多进程和信号处理:
```c
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#define NAME "你的姓名"
#define ID "你的学号"
#define CLASS "你的班级"
// 信号处理函数
void handler(int sig) {
switch (sig) {
case SIGUSR1:
printf("%s\n", NAME);
break;
case SIGUSR2:
printf("%s\n", ID);
break;
case SIGINT:
printf("停止\n");
exit(0);
default:
break;
}
}
int main() {
pid_t pid;
int status;
// 创建子进程
pid = fork();
if (pid == -1) {
perror("fork");
return -1;
} else if (pid == 0) {
// 子进程负责每隔1秒打印姓名
while (1) {
printf("%s\n", NAME);
sleep(1);
}
} else {
// 父进程负责接收键盘输入
signal(SIGUSR1, handler);
signal(SIGUSR2, handler);
signal(SIGINT, handler);
while (1) {
char c = getchar();
if (c == '1') {
kill(pid, SIGUSR1);
} else if (c == '2') {
kill(pid, SIGUSR2);
} else if (c == 'q') {
kill(pid, SIGINT);
wait(&status);
break;
}
}
}
return 0;
}
```
在该程序中,父进程接收键盘输入并向子进程发送信号,子进程每隔1秒打印自己的姓名。当接收到相应信号时,信号处理函数会打印出对应的信息。当接收到q键时,程序结束。