标签:自定义 内存 flow control 操作 参考 形式 efi turn
异常控制流ECF(Exception Control Flow)
- 硬件层:硬件检测到的事件会触发控制突然转移到异常处理程序
- 操作系统层:内核通过上下文切换讲控制从一个用户进程转移到另一个用户进程
- 应用层:一个进程可以发送信号到另一个进程,而接收者会将控制突然转移到它的一个信号处理程序
状态变化称为事件。
处理完成后:
- 返回当事件发生时正在执行的指令Icuur
- 返回没有发生异常将会执行的下一条指令
- 终止被中断的程序
进程提供给应用程序的关键抽象:
- 一个独立的逻辑控制流(PC值),好像程序独占地使用处理器。进程是轮流使用处理器的
- 一个私有的地址空间,好像程序独占地使用内存系统
进程控制
获取进程ID
创建进程
fork特点
进程三状态
传送一个信号到目的进程
指针数组(元素为指针的数组)
int *p1[5];
对于
int *p1[5]
,因为[]
的优先级要比*
要高,所以 p1 先与[]
结合,构成一个数组的定义,数组名为 p1,而int *
修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含5个指向 int 类型数据的指针,如下图所示,因此,它是一个指针数组。
数组指针(指向数组的指针)
int (*p2)[5]
对于语句
int (*p2)[5]
,()
的优先级比[]
高,*
号和p2构成一个指针的定义,指针变量名为p2,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,p2 是一个指针,它指向一个包含 5 个 int 类型数据的数组,如图 下所示。很显然,它是一个数组指针,数组在这里并没有名字,是个匿名数组。
指针函数(返回值为指针的函数)
#include <iostream>
using namespace std;
int *GetNum(int x); //指针函数声明形式
void main(void)
{
cout << "===============start================" << endl;
int num;
cout << "Please enter the number between 0 and 6: ";
cin >> num;
cout << "result is:" << *GetNum(num) << endl; //输出返回地址块中的值
system("pause");
}
int *GetNum(int x) {
static int num[] = { 0,1,2,3,4,5,6 };
return &num[x]; //返回一个地址
}
函数指针(指向函数的指针)
#include <iostream>
using namespace std;
int max(int a, int b) {
return a>b ? a : b;
}
void main(void)
{
cout << "===========start===========" << endl;
int(*func)(int, int); //定义一个指向该函数形式的指针变量
func = max;
int a, b;
cout << "Please enter two numbers:";
cin >> a >> b;
cout << "max=" << (*func)(a, b) << endl; //运用指针变量调用函数
cout << "max=" << max(a, b) << endl; //使用原函数调用
cout << "max=" << func(a, b) << endl; //使用函数指针名调用,func = max
system("pause");
}
致命错误:csapp.h:没有那个文件或目录
解决方法1:在编译时加上-I参数 头文件所在目录
问题2:编译带有自定义头文件的C程序,在加上头文件路径后,出现undefined reference to Fork
解决方法2:在编译带有自定义的头文件时,要先对该头文件里面所描述的方法生成静态链接库/动态链接库,然后在编译时调用该链接库。
问题3:由于csapp.h头文件中,还定义了一些线程方法,所以在进行编译时还应该加上-lpthread参数
man -k thread
和man 3 pthread_join
查看编译含有线程函数所需要添加的参数2019-2020-1 20175313 《信息安全系统设计基础》第九周学习总结
标签:自定义 内存 flow control 操作 参考 形式 efi turn
原文地址:https://www.cnblogs.com/xiannvyeye/p/11922939.html