系统编程总结

计算机五大单元:(冯诺依曼体系结构)

一、常见指令

1).常见的环境变量:PATH(搜索路径)、HOME(用户主工作目录)、HISTSIZE(历史记录)、SHELL(当前脚本)

2).修改查看环境变量:echo、env、set/unset

3).六种文件类型:普通文件、目录、连接文件、设备和设备文件、套接字、管道

4).shell命令行解释器作用:(1)解析用户指令给内核(2)提供一个可单独配置的使用shell资源配置文件的用户环境(3)搜索命令

5).常用指令与命令参数含义及使用:ls各项指令、cd命令、date指令、Cal指令、touch、mkdir、rmdir/rm、cp、mv、basename、more/cat、head、file、find、pwd、kill

二、权限管理

1)、文件访问者:u(文件所有者)、g(所有者所在组)、o(其它用户)

2)、访问权限:

a(基本权限):r(读)、w(写)、e(执行)

b(特殊权限):suid、sgid

3).文件权限表示方法:字符、8进制值

4).文件权限设置:chmod、chown、chgrp、umask

三、环境搭建工具

vim编辑器:

1).三种基本状态及三种状态间切换以及每个模式功能键:命令行模式、底行模式、插入模式(i、esc进行切换)

2).vim操作:打开、关闭、查看、查询、插、删除、替换、撤销、复制等

3).vim配置:设字体、语法高亮、行号、缩进空格等

gcc编译器:

过程:预处理(宏处理、文件包涵、条件编译)->编译(生成汇编)->汇编(生成机器语言)->链接(可执行文件)

gdb调试器:

调试过程即各调试选项作用

ctags:linux查看代码

Makefile(可自动化编译):

1).使用make命令工具解释Makele中指令

2).需编写文件依赖关系编译和链接程序

3).make clean命令以清除所有目标文件,以便重编译。

四、进程

1).进程概念

2).进程描述(PCB)

3).进程标识符(PID、PPID):唯一

4).进程在内存中的映像(在内核中存放可执行文件)

5).进程状态:R(运行)、S(睡眠)、D、T、X、Z(僵尸状态)

6).进程优先级:越小越先执行

7).进程创建方式fork()、vfork()、execve()以及区别

8).进程终止方式

9).进程等待(父等待子退出阻塞式、非阻塞式)

10).进程间程序替换:六种exec函数

11).进程间五种通信方式:匿名管道、命名管道、(System V版本)消息队列、信号量、共享内存以及各自适用场景

五:多线程编程

1).线程概念以及线程与进程区别与联系

2).线程创建

3).线程等待

4).线程终止

5).线程分离

6).线程同步与互斥:mutex互斥量、cindition条件变量、(POSIX版本)信号量

例:生产者与消费者模型、读者写者模型(读写锁)

7).死锁的产生与避免

六:LINUX信号

1).信号、信号递达、信号未决概念

2).产生信号:3种方式

3).信号在内核中的表示以及获取和修改信号集中某个信号(block表、pending表、handler表)

4).信号的捕捉

5).可重入函数与线程安全

6).竞态条件

七:终端、作业、守护进程

1).进程组、作业、会话、终端基本概念以及相关操作

2).守护进程概念以及与其它进程区别

3).守护进程创建过程

时间: 2024-10-14 10:26:49

系统编程总结的相关文章

嵌入式系统编程和调试技巧

嵌入式系统的开发,软件的运行稳定可靠是非常重要的.在芯片中,软件是没有质量的,但软件的质量可以决定一颗芯片的成败.芯片设计中,性能能否满足设计要求,除了硬件设计.软硬件配合的设计技巧,对于软件来说,编程的一些技术和技巧同样重要. 本文讲述我在芯片固件开发过程中使用的一些编程调试技巧.针对在嵌入式系统开发中常见的问题,如实时系统下的同步问题,动态内存分配的内存泄漏问题,如何在编程阶段预防BUG出现,调试阶段如何及时发现问题和定位问题.总结下经验,目的是开发一个稳定运行的固件,提高开发效率,提高运行

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/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h>文件中的常量. 通过cat 命令查看: [email protected]:~/Code/tlpi$ cat /usr/include/limits.h /* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005 Free Software

《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候都会发生缓冲.通过缓冲可以在一定程度上将用户空间与实际的物理设备分离,还可以减少内核访问磁盘的次数. 先来看看关于内核缓冲区高速缓冲:read和write调用在对磁盘文件进行操作的时候不会直接访问磁盘,如下图所示. 例如:write(fd, "abc", 3) write调用会将"

系统编程是什么

目录(?)[+] 部分摘自<Linux System Programming >作者: Robert Love 刘建文略译(http://blog.csdn.net/keminlau) KEY:系统论 系统编程 System Programming 过去的Unix编程是没有系统不系统之分的.即便是开发 X Window也是在系统级(system-level)编程,看到系统的所有API.现代的操作系统编程有所谓[系统级编程],使用与[应用编程]不同的API(System programming

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