Linux System Programming -- Appendix】的更多相关文章

这本书附录的名字是 "GCC对C语言的扩展" ,一下的内容是对扩展的总结 类型发现 GCC 允许通过变量的引用识别类型.这种操作支持泛型编程.在 C++.Ada 和 Java™ 语言等许多现代编程语言中都可以找到相似的功能.Linux 使用 typeof 构建 min 和 max 等依赖于类型的操作.清单 1 演示如何使用 typeof 构建一个泛型宏(见 ./linux/include/linux/kernel.h). 清单一:使用 typeof 构建一个泛型宏 #define mi…
1. The Stat Family #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf); struct stat{      dev_t…
这一章的标题是 "信号" ,所以本文将对信号的各个方面进行介绍,由于Linux中的信号机制远比想象的要复杂,所以,本文不会讲的很全面... 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断.从它的命名可以看出,它的实质和使用很象中断.所以,信号可以说是进程控制的一部分. 一.信号的基本概念 本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件.基本概念对于理解和使用信号,对于理解信号机制都特别重要.下面就来看看什么是信号. 1.基本概…
1. 内核提供三种不同的方式来记录时间 Wall time (or real time):actual time and date in the real world Process time:the time that a process spends executing on a processor 包括用户时间user time 和 系统时间system time Monotonic time:use the system's uptime (time since boot) for th…
1. Threading is the creation and management of multiple units of execution within a single process 二进制文件是驻留在存储介质上,已被编译成操作系统可以使用,准备执行但没有正运行的休眠程序 进程是操作系统对 正在执行中的二进制文件的抽象:已加载的二进制.虚拟内存.内核资源 线程是进程内的执行单元 processes are running binaries, threads are the smal…
1. 进程调度 the process scheduler is the component of a kernel that selects which process to run next. 进程调度器需要使 处理器使用率最大化,并且提供 使多个进程并发执行的虚拟   Deciding which processes run, when, and for how long is the process scheduler's fundamental responsibility.   时间…
1. Scatter/Gather I/O a single system call  to  read or write data between single data stream and multiple buffers This type of I/O is so named because the data is scattered into or gathered from the given vector of buffers Scatter/Gather I/O 相比于 C标准…
1.每个Linux进程都有一个最大打开文件数,默认情况下,最大值是1024 文件描述符不仅可以引用普通文件,也可以引用套接字socket,目录,管道(everything is a file) 默认情况下,子进程会获得其父进程文件表的完整拷贝   2.打开文件 open系统调用必须包含 O_RDONLY,O_WRONLY,O_RDWR 三种存取模式之一 注意 O_NONBLOCK模式 ) ) 3.读文件 read系统调用会有以下结果: (1)返回值与请求数len相同,所有len字节都存储在buf…
1. Linux系统编程的三大基石:系统调用.C语言库.C编译器 系统调用:内核向用户级程序提供服务的唯一接口.在i386中,用户级程序执行软件中断指令 INT n 之后切换至内核空间 用户程序通过寄存器告知内核执行系统调用的所需参数   2. API 和 ABI API:application programming interface 定义源码级接口,必须确保源码级兼容 ABI:application binary interface 定义二进制接口,必须确保二进制兼容 ABI包括:调用约定…
内存管理 一.分配动态内存的几个函数 用户空间内存分配:malloc.calloc.realloc1.malloc原型如下:extern void *malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节块.工作机制:malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小…
文件和目录管理 一.文件与其元数据 我们首先看一下一个简单的文本文件是怎么保存的: 打开vim,编辑一段文本: [root@localhost ~]# vim hello.txt 编辑内容如下: opencfg.com is best website for java 查看其属性: [root@localhost ~]# ls -l -rw-r--r-- 1 root root 37 9月 4 19:03 hello.txt 据这个例子的目的,是为了说明Linux系统中文件是由3个部分组成:  …
这一章的题目是--高级进程管理,这篇文章将以书中所叙的顺序进行讲解 1.让出处理器 Linux提供一个系统调用运行进程主动让出执行权:sched_yield.进程运行的好好的,为什么需要这个函数呢?有一种情况是用户空间线程的锁定.如果一个线程试图取得另一个线程所持有的锁,则新的线程应该让出处理器知道该锁变为可用.用户空间锁没有内核的支持,这是一个最间单.最有效率的做法.但是现在Linux线程实现引入一个使用futexes的优化解决方案. 另一个情况是在有处理器密集型程序可用周期性调用sched_…
1. 信号是软中断,提供处理异步事件的机制 异步事件可以是来源于系统外部(例如用户输入Ctrl-C)也可以来源于系统内(例如除0)   内核使用以下三种方法之一来处理信号: (1) 忽略该信号.SIGKILL和SIGSTOP不能被忽略. (2) 捕捉并且处理该信号.The kernel will suspend execution of the process’s current code path and jump to a previously registered function. SI…
1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系结构决定了内存页大小,32位系统通常是 4KB, 64位系统通常是 8KB 内存页分为 valid or invalid: A valid page is associated with an actual page of data,例如RAM或者磁盘上的文件 An invalid page is…
1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是LInux内核通过数据结构表示的实体 inode存储相关联文件的元数据   ls -i 命令获取文件的inode number   /* obtaining the metadata of a file */ #include <sys/types.h> #include <sys/stat.…
1. 进程是unix系统中两个最重要的基础抽象之一(另一个是文件) A process is a running program A thread is the unit of activity inside of a process   the virtualization of memory is associated with the process, the threads all share the same memory address space   2. pid The idle…
1. partial block operations are inefficient. The operating system has to “fix up” your I/O by ensuring that everything occurs on block-aligned boundaries and rounding up to the next largest block   用户级程序可能在某一时刻仅仅读写一个字节,这是极大的浪费.Each of those one-byte…
写在前面:本文是对OSCon09的<Linux System and Performance Monitoring>一文的学习笔记,主要内容是总结了其中的要点,以及加上了笔者自己的一些理解.通过总结,一方面是为了加深笔者自己的理解,另一方面也是希望能对有需要的朋友有所帮助. 做为一名服务器开发工程师,经常会有分析系统性能,解决系统性能瓶颈的需求.通常我们所说的性能问题,不外乎就是CPU/Memory/IO/Network这四个方面,这四个方面每个都有各自独特之处,同时也都是相互关联的.下面就分…
source: http://linoxide.com/linux-shell-script/shell-script-check-linux-system-health/ This article introduces a shell script to perform linux system health check.This script collects system information and status like hostname, kernel version, uptim…
The frequently used operation in Linux system    2017-04-08 12:48:09  1. mount the hard disk:  #: fdisk -l     %% use this operation to check how many and what disk it found in the computer. #: mkdir yiDongYingPan   %% mkdir a new file as the locatio…
转自:http://blog.csdn.net/ysbj123/article/details/51233618 当运行GNU链接器gld(ld)时若使用了"-M"选项,或者使用nm命令,则会在标准输出设备(通常是屏幕)上打印出链接映像(link map)信息,即是指由链接程序产生的目标程序内存地址映像信息.其中列出了程序段装入到内存中的位置信息.具体来讲有如下信息: 目标文件及符号信息映射到内存中的位置. 公共符号如何放置. 链接中包含的所有文件成员及其引用的符号. 通常我们会把发送…
本文是笔者最近遇到的一个故障的处理过程,解决方案是Rebuild RPM 的DB,后面内容其实是REDHAT官方的solutions,不过我遇到的现象和解决方案都与官方有点出入,故一直帖出来: 我遇到的故障现象: [root@migrationLin6 ~]# rpm -qa error: rpmdbNextIterator: skipping h# 514 Header V3 RSA/SHA256 Signature, key ID fd431d51: BAD error: rpmdbNext…
http://www.cyberciti.biz/tips/reboot-or-halt-linux-system-in-emergency.html Linux kernel includes magic system request keys. It was originally developed for kernel hackers. However, you can use this hack to reboot, shutdown or halt computer safely (r…
2014-06-11 Check the Linux system log find the errorr: Jun  9 11:18:49 hostname avahi-daemon[3640]: Invalid query packet. Jun  9 11:19:29 hostnam  elast message repeated 7 times Jun  9 11:22:06 hostnam  eavahi-daemon[3640]: Invalid query packet. Jun…
Linux System linux 是一个功能强大的操作系统,同时它是一个自由软件,是免费的.源代码开放的,编制它的目的是建立不受任何商品化软件版权制约的.全世界都能自由使用的UNIX兼容产品.各种使用 Linux 作为内核的 GNU 操作系统正被广泛地使用著:虽然这些系统通常被称作为“Linux”,但是它们应该更精确地被称为 GNU/Linux 系统 .…
开一个新书<Hands-On System Programming with Go>,系统的了解一下, 这方面的东东,以前用C语言实现过, 现在用GO,重新来!! package main import ( "fmt" "os" "path/filepath" ) func main() { wd, err := os.Getwd() if err != nil { fmt.Println(err) return } fmt.Prin…
目录 . 为什么要构建日志系统 . 通用日志系统的总体架构 . 日志系统的元数据来源:data source . 日志系统的子安全域日志收集系统:client Agent . 日志系统的中心日志整合系统:log server . 日志系统的后端存储系统:log DB . 日志系统搭建学习 1. 为什么要构建日志系统 log是管理员每日需要查看的文件记录.里面记载了大量系统正常和不正常的运行信息,这些信息对管理员分析系统的状况.监视系统的活动.发现系统入侵行为是一个相当重要的部分对于安全研究员来说…
在检查Linux的日志文件时,发现大量 avahi-daemon[3733]: Invalid query packet错误(不同服务器对应的数字有所不同) Aug  3 07:00:01 hostname auditd[3143]: Audit daemon rotating log files Aug  3 08:02:39 hostname avahi-daemon[3733]: Invalid query packet. Aug  3 08:03:19 hostname last mes…
目录 .文件系统及访问权限 . Linux Syslog . Linux日志审计 . 帐号安全管理 . 基础物理安全 . 系统编译环境安全 . 系统病毒.后门.rootkit安全 . 系统端口.服务安全 . 系统内核安全 . 基于系统日志审计的入侵检测 . 构建日志收集系统过程中面临的技术挑战 1.文件系统及访问权限 Linux为每个文件都分配了一个文件所有者,称为"文件属主",并赋予文件主惟一的注册名 . 对文件的控制取决于文件主或超级用户root(linux系统中的root用户有无…
Sysvinit 的小结 Sysvinit 的优点是概念简单.Service 开发人员只需要编写启动和停止脚本,概念非常清楚:将 service 添加/删除到某个 runlevel 时,只需要执行一些创建/删除软连接文件的基本操作:这些都不需要学习额外的知识或特殊的定义语法(UpStart 和 Systemd 都需要用户学习新的定义系统初始化行为的语言). 其次,sysvinit 的另一个重要优点是确定的执行顺序:脚本严格按照启动数字的大小顺序执行,一个执行完毕再执行下一个,这非常有益于错误排查…