资源简介
包含代码和文档
实验一
实验内容
编写程序,演示多进程并发执行和进程软中断、管道通信。
父进程使用系统调用pipe( )建立一个管道,然后使用系统调用fork()创建两个子进程,子进程1和子进程2;
子进程1每隔1秒通过管道向子进程2发送数据:
I send you x times. (x初值为1,每次发送后做加一操作)
子进程2从管道读出信息,并显示在屏幕上。
父进程用系统调用signal()捕捉来自键盘的中断信号(即按Ctrl+C键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child Process l is Killed by Parent!
Child Process 2 is Killed by Parent!
父进程等待两个子进程终止后,释放管道并输出如下的信息后终止
Parent Process is Killed!
实验二
实验内容
过Linux多线程与信号灯机制,设计并实现计算机线程与I/O线程共享缓冲区的同步与通信。
程序要求:两个线程,共享公共变量a
线程1负责计算(1到100的累加,每次加一个数)
线程2负责打印(输出累加的中间结果)
实验三
实验内容
利用多个共享内存(有限空间)构成的环形缓冲,将源文件复制到目标文件,实现两个进程的誊抄。
实验四
实验内容
1、(1)Blink程序的编译和下载
(2)给Blink程序加入printf,在每次定时器事件触发点亮LED的同时通过串口显示信息
(3)修改BLink程序,只使用一个Timer,三个LED灯作为3位的二进制数表示(亮灯为1,不亮为0),按照0-7的顺序循环显示,同时将数值显示在终端上。
代码片段和文件信息
#include
#include
#include
#include
#include
//声明全局变量
int p1p2;
int fd[2];
//中断信号处理函数
void sig_handler(int sig_no)
{
if(sig_no == SIGINT)
{
kill(p1SIGUSR1);//给子进程p1发信号
kill(p2SIGUSR1);//给子进程p2发信号
}
}
void sh(int sig_no)
{
close(fd[0]);
close(fd[1]);
if(p1 == 0 && sig_no == SIGUSR1)//子进程p1退出
{
printf(“Child Process1 is killed by Parent!\n“);
exit(0);
}
if(p2 == 0 && sig_no == SIGUSR1)//子进程p2退出
{
printf(“Child Process2 is killed by Parent!\n“);
exit(0);
}
}
int main(void)
{
char buf[100];
char recive[100];
int x = 1;//计数变量
if(pipe(fd) < 0)//创建无名管道
{
perror(“Fail to create pipe.\n“);
exit(0);
}
signal(SIGINTsig_handler);//中断信号
while((p1 = fork())==-1);//创建子进程p1
if(p1 == 0)//子进程p1
{
signal(SIGINTSIG_IGN);
signal(SIGUSR1sh);
while(1){
close(fd[0]);
sprintf(recive“I send you %d times.“x);
write(fd[1]recive30);
x++;
sleep(1);
}
}
else if(p1 >0)//返回父进程
{
while((p2 = fork())==-1);
if(p2 == 0)//子进程p2
{
signal(SIGINTSIG_IGN);
signal(SIGUSR1sh);
while(1){
close(fd[1]);
read(fd[0]buf40);
printf(“%s\n“buf);
}
}
//父进程等待子进程p1p2退出
waitpid(p1NULL0);
waitpid(p2NULL0);
close(fd[0]);
close(fd[1]);
printf(“Parent Process is killed!\n“);
}
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-04-13 07:48 X201605005+覃家旺\
目录 0 2017-06-16 17:24 X201605005+覃家旺\lib1\
文件 1818 2017-04-13 07:48 X201605005+覃家旺\lib1\lib1.c
目录 0 2017-06-16 17:26 X201605005+覃家旺\lib2\
文件 2441 2017-04-19 15:03 X201605005+覃家旺\lib2\lib2.c
目录 0 2017-06-16 17:32 X201605005+覃家旺\lib3\
文件 1631 2017-05-10 17:27 X201605005+覃家旺\lib3\copy.c
文件 1597 2017-05-10 16:59 X201605005+覃家旺\lib3\get.c
文件 2003 2017-05-10 17:25 X201605005+覃家旺\lib3\main.c
文件 1479 2017-05-10 17:36 X201605005+覃家旺\lib3\put.c
目录 0 2017-05-24 15:06 X201605005+覃家旺\lib4\
目录 0 2017-05-24 14:41 X201605005+覃家旺\lib4\1\
文件 2673 2017-05-21 22:19 X201605005+覃家旺\lib4\1\bl
文件 3297 2017-05-24 14:41 X201605005+覃家旺\lib4\1\bl
文件 108 2017-05-21 22:09 X201605005+覃家旺\lib4\1\Makefile
文件 678 2012-08-21 02:28 X201605005+覃家旺\lib4\1\README.txt
目录 0 2017-05-21 22:02 X201605005+覃家旺\lib4\1\build\
目录 0 2017-05-24 15:01 X201605005+覃家旺\lib4\1\build\telosb\
文件 372883 2017-05-24 15:00 X201605005+覃家旺\lib4\1\build\telosb\app.c
文件 180 2017-05-24 15:00 X201605005+覃家旺\lib4\1\build\telosb\ident_flags.txt
文件 30915 2017-05-24 15:00 X201605005+覃家旺\lib4\1\build\telosb\main.exe
文件 25039 2017-05-24 15:00 X201605005+覃家旺\lib4\1\build\telosb\main.ihex
文件 25401 2017-05-24 15:00 X201605005+覃家旺\lib4\1\build\telosb\tos_image.xm
目录 0 2017-05-24 14:39 X201605005+覃家旺\lib4\2\
文件 2673 2017-05-24 11:54 X201605005+覃家旺\lib4\2\bl
文件 3094 2017-05-24 14:39 X201605005+覃家旺\lib4\2\bl
文件 108 2017-05-21 22:09 X201605005+覃家旺\lib4\2\Makefile
文件 678 2012-08-21 02:28 X201605005+覃家旺\lib4\2\README.txt
目录 0 2017-05-21 22:34 X201605005+覃家旺\lib4\2\build\
目录 0 2017-05-24 15:03 X201605005+覃家旺\lib4\2\build\telosb\
文件 372434 2017-05-24 15:03 X201605005+覃家旺\lib4\2\build\telosb\app.c
............此处省略88个文件信息
- 上一篇:tender.zip
- 下一篇:STM32f103超声波
评论
共有 条评论