Linux工程实践学习笔记——基于主机系统的多客户即时通讯/聊天室 Day(1)

又开始上工程实践了,这次的内容是平时接触得比较少的Linux系统编程。一连七天,最终结课是完成一个基于主机系统的多客户即时通信/聊天室

 

先来看看课程涉及的主要内容。

 

本课程围绕构建一个基于主机系统的多客户即时通讯/聊天室项目展开:

涉及的理论知识
进程控制 :僵尸进程 / 孤儿进程、进程控制、守护,进程。。。
进程间通信 :管道、命名管道、信号。。。
多线程编程 : 锁、信号量。。。
围绕该软件的构建提炼 3 个基本实验
进程控制
进程间通信
多线程编程
综合案例分析 - 即时聊天系统实现 :采用所学的 OS 函数编程实现基于主机系统的多客户即时通讯 / 聊天室软件
 
这里只给出大概方向,如果读者有兴趣还请自行爬文
 
Day1 所学到的内容概括:
 
进程控制相关的系统调用 :
fork(), getpid (), getppid ()
exit(),wait(), waitpid ()
 
创建一个新的进程 – fork()
通过复制调用进程创建一个新的进程
返回值
子进程: 0
父进程:子进程的 pid
出错: -1
 
僵尸进程的避免
1. 父进程通过 wait waitpid 等函数等待子进程结束
2. 如果父进程很忙 , 可以用 signal 函数为 SIGCHLD 安装 handler, 因为子进程结束后 , 父进程会收到该信号 , 可以在 handler 中调用 wait 回收
3. 如果父进程不关心进程什么时候结束 , 那么可以用 signal(SIGCHLD,SIG_IGN) 通知内核 , 内核会回收 , 并不再给父进程发送信号
4. Stevens 的两次 fork 避免僵尸进程 : 就是 fork 两次,父进程 fork 一个子进程,然后继续工作,子进程 fork 一个孙进程后退出,那么孙进程被 init 接管,孙进程结束后, init 会回收。不过子进程的回收还要自己做
 
 
作业
1. 编例实现创建 n 个子进程 P1 P2 Pn , 其中,各进程之间的关系是: P1 是调用进程的子进程, P(k+1) Pk 的子进程。请打印各进程本身的进程号、父进程号,子进程号。要求每个父进程都要等待子进程退出后才能退出。
 
 
2. 编例实现创建 n 个子进程 P1 P2 Pn , 其中,各进程之间的关系是: P1 …, Pn 都是调用进程的子进程。请打印各进程本身的进程号、父进程号,子进程号。要求每个父进程都要等待子进程退出后才能退出。
 
第一题
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
##include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>


int main(){

        pid_t pid;
        int n=3;
        int i;
        int status;

        for(i=0; i<n; i++){
                pid = fork();
                if(pid<0){
                        perror("fork is failed");
                }
                if(pid==0){
 printf("I'm child process Id: %lu with parent process ID:%lu\n",(long)getpid(),(long)getppid());
                }
                if(pid>0){
                        printf("I'm parent process ID: %lu whit child process ID:%d \n",(long)getpid(),pid);
                        wait(&status);
                        break;
                }
        }




        return 0;
}





 
 
 
 
 第二题
 
 
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
##include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>




int main(){


        int n = 3;
        pid_t pid;
        int childNum = n;
        int status;
     
        printf("I'm parent process ,ID: %lu \n",(long)getpid());

        for(n=0; n<3; n++){
                pid = fork();
                if(pid < 0){
                        perror("fork failed");
                }
                if(pid == 0) {
                        printf("I'm child process, ID: %lu with parent process ID: %lu \n",(long)getpid(),(long)getppid());
                        sleep(10);
                        exit(0);
                }
        }

 while(1){
                wait(&status);
                childNum--;
                if(childNum<=0){
                        break;
                }
        }

 
 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
连续系统的时域分析是信号与系统学习中的重要部分。时域分析研究的是信号在时间域内的变化规律,常用的分析方法包括冲激响应法、单位阶跃响应法和相应方程法。 1. 冲激响应法 冲激响应法是一种基于系统输入信号的冲激函数的响应来分析系统时域特性的方法。具体来说,将系统输入信号表示为一个冲激序列的加权和,然后计算出系统对每个冲激的响应,得到系统的冲激响应函数。然后,通过线性时不变系统的特性,可以将任何输入信号都表示为冲激序列的加权和,从而得到系统对任何输入信号的响应。 2. 单位阶跃响应法 单位阶跃响应法是一种基于系统输入信号的单位阶跃函数的响应来分析系统时域特性的方法。具体来说,将系统输入信号表示为一个单位阶跃函数的加权和,然后计算出系统对每个单位阶跃函数的响应,得到系统的单位阶跃响应函数。然后,通过线性时不变系统的特性,可以将任何输入信号都表示为单位阶跃函数的加权和,从而得到系统对任何输入信号的响应。 3. 相应方程法 相应方程法是一种基于系统微分方程的解析解来分析系统时域特性的方法。具体来说,根据系统微分方程的特性,可以得到系统的传递函数,然后通过拉普拉斯变换将输入信号和传递函数变换到频域内,最终通过反变换得到系统的时域响应。 以上三种方法都是分析连续系统时域特性的重要方法,各自适用于不同的情况。掌握这些方法可以帮助我们更好地理解和分析连续系统的时域特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值