回顾linux系统编程学习过程

一、基础知识

1、linux操作系统,熟悉常用的指令。

2、vim编译器的使用,Makefile的编写。

3、用户以及权限方面相关的知识。

4、linux下环境变量的概念。

二、进程概念相关

1、进程的概念,了解PCB的概念,以及task_struct结构体。

2、进程的创建,fork()与vfork()的区别和联系。

3、进程的等待,waitpid()与wait(),阻塞等待与非阻塞等待。

4、进程的程序替换,execl(),execlp(),execle(),execv(),execvp(),execvlp()。

5、进程的终止,退出码的概念,低八位(异常信号量),次低八位(正常退出码)

三、进程间通信(symtem-V)

1、内核缓冲区与用户缓冲区的概念。

2、文件描述符与文件指针的概念。

3、命名管道与匿名管道(实现父子进程匿名管道的通信和两个进程间命名管道通信)

匿名管道(pipe)的特点(以文件流的模式,生命周期和进程相关联,只能支持有血缘关系的进程间单向通信),命名管道(环形buff)(fifo,mkfifo,mkmod)的特点(可以使不同进程间进行通信)。

4、消息队列(实现两个进程client和server的相互发消息)

msgget(),ftok(),msgctl(),msgrcv(),msgsnd(),消息队列的特点(基于消息面向数据包的通信方式,生命周期和内核关联,双向通信)。

5、信号量(实现一个父子进程的通信)

首先了解临界资源和临界区的概念,信号量是原子操作下实现的,system-v版本下的信号量没有传输数据只用于控制,senbuf结构体,semun联合,

semset(),semctl(),semop()的操作。

6、共享内存(实现两个进程client和server的相互发消息)

特点(最高效的通信方式,需要自己维护同步与互斥)。shmget(),shmctl(),shmat(),shmdt()。

四、线程的概念(posix标准)

1、线程与进程的区别与联系。

2、线程的创建,pthread_create()。

线程的等待,pthread_join()阻塞方式等待。

线程的返回,线程内部return,使用pthread_exit()退出某个线程,使用       pthread_cancel()取消某个线程。

线程的分离,pthread_decth() 分离后的线程会自己管理自己的资源进程,不用   阻塞式等待。

3、线程的同步与互斥

1>互斥量:线程的互斥。

pthread_mutex_lock(),pthread_mutex_unlock(),pthread_mutex_destory()

2>生产者消费者模型,死锁的概念,死锁产生的4个必要条件,使用条件变量和

互斥量实现一个生产者消费者模型。

3>posix版本信号量sem,单位为信号量区别于system_v版本下信号量集。        sem_init(),sem_wait(),sem_post()(环形数组buff下实现多生产者多消费者    模型)。

4>读写锁,读写优先的问题。

五、linux信号

1、kill-l普通信号1-31,实时信号34-64。

2、信号的产生方式,键盘,软硬件,kill(),alarm(),abort(),raise()等。

3、信号的处理方式,忽略,执行默认动作,执行自定义动作。

4、信号未决和信号递达。task_struct中pending,block,handler表。

5、信号集sigset_t,信号处理函数 sigemptyset(),sigaddset(),sigpromask(),

sigpending()。(屏蔽2号信号输出当前pending集,解除屏)

6、信号的捕捉,signal(),sigaction()。(模拟sleep)

7、信号的处理流程,用户态与内核态切换的场景。

六、作业控制与守护进程

1、进程组,shell下的作业控制,会话的概念。

2、控制终端(tty,pts,pty),init下的7个启动模式,用户登录的流程,作业控制,fg命令,bg%命令。

3、守护进程的概念,crond系统进程的编写,setsid(),守护进程的创建。

阅读书籍,深入理解计算机系统,unix高级环境编程

时间: 2024-08-07 15:37:37

回顾linux系统编程学习过程的相关文章

LINUX系统编程 由REDIS的持久化机制联想到的子进程退出的相关问题

19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程需要做的什么事情,所以特定看了UNIX环境编程和LINUX系统编程这2本书 重新梳理下整个要点. 内容: 一般而言: 如果程序类似于下面的情况: if((pid=fork())==0) { dochildtthing(); exit(0); } else if(pid>0) { dofathertt

Linux系统编程-setitimer函数

功能:linux系统编程中,setitimer是一个经常被使用的函数,可用来实现延时和定时的功能. 头文件:sys/time.h 函数原型: int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value); 参数含义: 1.which参数用来设置定时器类型,可选的值为 (1)ITIMER_REAL : 设置定时器以系统真实所花费的时间来计时,运行指定时间后发送SIGALRM信号. (

Linux系统编程笔记

写在开篇:出于对未来职业规划的考虑(其实还是一团糟),制定了一个基本的学习方向,那就是从系统编程学习API慢慢的深入内核,这是一个比较成熟的学习路线.所以从本篇开始,在这段时间会陆续记录Linux系统编程的学习笔记,除了供学习之余复习只用,同时也期望能记录初入职场摸爬滚打的第一个3年. 第一章 文件I/O 文件访问的基本调用一般是 read()和write(),但是在访问文件之前,要做的是一项很重要的工作就是:打开,没错!通过调用 open()或create()实现 #include <sys/

Linux系统编程@进程通信(一)

进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统的一个分支) POSIX进程间通信(POSIX:可移植操作系统接口,为了提高UNIX环境下应用程序的可移植性.很多其他系统也支持POSIX标准(如:DEC OpenVMS和Windows).) 现在Linux使用的进程间通信方式包括: 管道(pipe).有名管道(FIFO) 信号(signal) 消

linux系统编程之管道(一):匿名管道(pipe)

原文地址:http://www.cnblogs.com/mickole/p/3192210.html 一,什么是管道 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道: 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程): 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中. 数据的读

Linux系统编程之访问文件夹及其文件属性

1. 文件夹操作:opendir, readdir, closedir 2. 文件属性:lstat 3. 实现功能:获取指定文件夹下所有的文件(使用递归),因此就能计算所有文件大小之类的啦... 代码示例如下: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <sys/stat

linux系统编程之信号(四)

今天继续探讨信号相关的东东,话不多说,正入正题: 信号在内核中的表示: 下面用图来进一步描述这种信号从产生到递达之间的状态(信号阻塞与未诀): 那是怎么来决定的呢?下面慢慢来举例分解: 所以,通过这些图,可以描述信号从产生到递达的一个过程,上面的理解起来可能有点难,下面会用代码来进一步阐述,在进行实验之前,还需了解一些函数的使用,这些函数在实验中都会被用到,也就是信号集操作函数. 信号集操作函数: 其中解释一下sigset_t,百度百科解释为: 而这个函数的意义就是将这64位清0 这个函数的意义

Linux系统编程札记:进程通信(一) &nbsp; &nbsp;

进程简单来讲就是一个程序的一次执行,这里说的进程一般都指的是运行在用户态的进程,而处于用户态的不同进程之间是彼此相互隔离的,它们必须通过某种方式来进行通信,具体理由如下: (1)数据传输:有时候一个进程需要将它的数据发送给另一个进程. (2)资源共享:有时候多个进程之间需要共享同样的资源. (3)通知事件:有时候一个进程需要向另一个或一组进程发送消息,通知它们发生了某个事件. (4)进程控制:有些进程希望能够完全控制另一个进程的执行,此时控制进程希望能够拦截另一进程的所有操作,并能够及时知道它的

嵌入式 Linux系统编程(一)——文件IO

嵌入式 Linux系统编程(一)--文件IO 一.文件IO概念 linux文件IO操作有两套大类的操作方式:不带缓存的文件IO操作,带缓存的文件IO操作.不带缓存的属于直接调用系统调用(system call)的方式,高效完成文件输入输出.它以文件标识符(整型)作为文件唯一性的判断依据.这种操作不是ASCI标准的,与系统有关,移植有一定的问题.而带缓存的是在不带缓存的基础之上封装了一层,维护了一个输入输出缓冲区,使之能跨OS,成为ASCI标准,称为标准IO库.不带缓存的方式频繁进行用户态 和内核