上一篇:IPV4流媒体广播系统02
1. 文件共享
思路:
进程1 读,进程2写,两进程协同工作完成这个工作
2.返回文件描述信息的一个系统调用 stat
man 2 stat 可以看到
3.
进程的终止方式
4.钩子函数
正常执行exit(0)之前,挂在钩子上的函数被调用
有点像是c++里面的析构函数
钩子函数的使用:
#include <stdio.h>
#include <stdlib.h>
static void f1(void)
{
puts("f1() is working");
}
static void f2(void)
{
puts("f2() is working");
}
static void f3(void)
{
puts("f3() is working");
}
int main()
{
puts("Begin!");
//分别把f1(),f2(),f3()挂在钩子上,下边那三句话不是代表函数调用
atexit(f1);
atexit(f2);
atexit(f3);
exit(0);
}
效果
5.进程的基本知识
fork 的返回值, 一次调用,两次返回
fork()特殊就特殊在这里,一般来说,一个函数调用一次就返回一次,而fork()则是两次返回
6.fork() 的使用
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t pid;
printf("[%d]Begin!\n",getpid());//父进程来打印
fflush(NULL);//fork之前,刷新所有的成功打开的流
pid=fork();//一次调用,两次返回
if(pid<0)
{
perror("fork()");
exit(1);
}
if(pid==0) //child 第1 或(2)次返回
{
printf("[%d]:Child is working!\n",getpid());
}
else //parent 第2 或(1)次返回
{
printf("[%d]:Parent is working!\n",getpid());
}
printf("[%d]End!\n",getpid());
}
运行结果:
这一点很重要:fflush(NULL);//fork之前,刷新所有的成功打开的流
7.wait()
8.
9.execl 和 fork , wait 联合使用
#include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 /**
5 *data +%s
6 **/
7 int main()
8 {
9 pid_t pid;
10 puts("Begin!");
11
12 fflush(NULL);
13 pid = fork();
14 if(pid<0)
15 {
16 perror("fork");
17 exit(1);
18 }
19
20 if(pid == 0) //子进程,干活
21 {
//execl() 摇身一变变成其他进程,但是pid 不变,外壳没变,东西换
了
23 execl("/bin/date","date","+%s",NULL);//摇身一变
24 perror("execl()"); //摇身一变失败了,输出错误
25 exit(1);
26 }
27
28 wait(NULL); //父进程等着,给子进程收尸
29
30 puts("End!");
31
32 exit(0);
33 }
效果: