Linux编程–信号

1、信号的概念:共性

  • 简单
  • 不能携带大量信息
  • 满足某个特设条件

2、与信号相关的事件与状态

  • 键盘产生:Ctrl+C、Ctrl+Z等;
  • 系统调用:kill、raise、abort
  • 软件条件:定时器
  • 硬件异常:非法访问、除0等;
  • 命令产生:kill命令

3、信号的处理方式

  • 执行默认动作
    • Term:终止进程
    • Ign:忽略信号
    • Core:终止进程,生成Core文件(查看死亡原因,用于gdb调试)
    • Stop:停止(暂停)进程
    • Cont:继续停止(暂停)进程
  • 忽略(丢弃)
  • 捕捉(调用户处理函数)

4、信号四要素

  • 编号
  • 名称
  • 事件
  • 默认处理动作

5、常用信号

~$ k[......]

继续阅读

Linux编程–进程间通讯

进程间通讯(IPC, InterProcess communication)

  • 管道(使用最简单)
  • 信号(开销最小)
  • 共享映射区(无血缘关系)
  • 本地套接字(最稳定)

1、管道

  • 管道能够实现两个进程间的通讯
  • pipe(int[]),需要传入一个文件描述符数组,长度为2做为管道的两端操作
  • 函数的参数为传出参数,两个文件描述符数组,第一个为写,第二个为读
  • 需要通讯的两个进程只需要操作相对应的文件描述符即可实现数据的读或写
  • 数据自己读不能自己写
  • 数据一旦被读走,便不在管道中存在,不可反复读取
  • 由于管道采用半双工通讯方式,因此数据只能在一个方向上流动;
  • 只能在有公共祖先的进程间使用管道
#[......]

继续阅读

Linux编程–进程的基本使用

1、创建进程的函数为fork

  • 子进程会在当前进程的基础上创建
  • 创建的子程与当前进程都会执行进程后的代码
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(){

    pid_t pid = getpid();
    printf("pid:%u\n" ,pid);

    // 从此处开始,后面的代码会被执行2次
    pid_t fork_pid = fork();
    if (fork_pid == -1){
        perror("fork error:");
        exit(1);
    }else if (fork_pid == 0){
        // 为0是返回给子线程,表明线程创建成功
        // 当前操作在子线程中执行
        printf("子进程:pid:%u, ppid:%u\n", getpid(), getppid());
    }else{
        // 父线程中返回的是子线程id号
        printf("父进程:pid:%u, ppid:%u\n", getpid(), getppid());
    }
    printf("fork:%u\n", fork_pid);
    return 0;
}

输出结果为:[……]

继续阅读

Linux操作系统基本介绍

1、程序与进程

  • 程序相当于剧本,而进程则相当于根据剧本上演的戏;

2、多进程

  • 单道程序设计模式:
    • 同一时间只能有一个进程占用CPU资源
    • 如:DOS操作系统
  • 多道程序设计模式:
    • CPU划分多个时间轮片,通过时钟中断的方式切换进程,硬件手段
    • 如:100ns为一个时间轮片,人的眼睛识别在毫秒级别;
    • 从人的感知上,CPU是同时执行了多个程序;

3、CPU工作原理

  • 硬盘—> 内存—> Cache —> 预取器 —> 译码器 —> 寄存器 —> 算术逻辑单元(ALU) —> 寄存器 —> 内存 —> 硬盘

4、MMU工作原理(内存管理单元)

  • 虚拟地址与物理内存的映射
  • 设置修改内存访问[……]

    继续阅读

Linux文件的基本操作相关函数

1、Linux虚拟地址空间

  • Linux可执行文件格式为ELF,通过file xxxx可以查看文件类型
  • 虚拟地址空间在32位系统中为4G,每个应用程序都有独立的4G
  • 地址位从高到低分别为:
    • 3G ~ 4G:Linux Kernel,内存管理、进程管理、设备驱动、VFS虚拟文件系统
    • 0G ~ 3G
    • 环境变量
    • 命令行参数
    • 栈空间
    • 共享库
    • 堆空间
    • ELF
    • 未初始化的全局变量
      • 已初始化的全局变量
      • 代码段、二进制机器指令
      • 受保护的地址(0 ~ 4K)

2、Linux文件基本组成[……]

继续阅读