本章预热与后续系统编程有关的概念. 术语“操作系统”通常包含2种含义:一是指完整的软件包,包括管理计算机资源的核心组件,已经附带的标准软件:二是独指管理硬件的内核. 内核具有诸多概功能,包括: 进程管理 内存管理 文件系统支持 设备管理 在内核的管理下,操作系统会给每个用户营造一种抽象:虚拟化,即使得每个用户感觉自己在独占机器. 内核通过硬件将CPU分为2种状态,一种是用户态,又称目态:另一种是核心态,又称管态.两者区别是对CPU的限制,前面一种有很大限制,后一种无限制. 操作系统的一切活动都掌…
Unix的开发不受控于某一个厂商或者组织,是由诸多商业和非商业团体共同贡献进行演化的.这导致两个结果:一是Unix集多种特性于一身,二是由于参与者众多,随着时间推移,Unix实现方式逐渐趋于分裂. 由于第二个结果导致的发展就是:大家要求统一标准.类似秦王扫六合,统一文字和货币. Unix出现之后很快出现了C语言,随后Unix被C语言重写,这也是第一个以高级语言开发的操作系统.由于使用了高级语言,使得Unix能够像其他硬件架构进行移植,因为不再使用依赖硬件的低级语言了. C/C++语言是系统编程语…
关键词:fasync_helper.kill_async.sigsuspend.sigaction.fcntl.F_SETOWN_EX.F_SETSIG.select().poll().poll_wait()等. <Linux/UNIX系统编程手册>第63章主要介绍了select()/poll().信号驱动IO.epoll三方面,以及他们之间异同.优劣点. 这里准备结合项目中遇到的问题,分两个方向进行归纳总结.一是一个IO模型从测试程序.API.内核实现进行纵向分析:二是横向不同IO模型的优缺…
关键词: 1. socket基础 一个典型的客户端/服务器场景中,应用程序使用socket进行通信的方式如下: 各个应用程序创建一个socket.socket是一个允许通信的设备,两个应用程序都需要用到它. 服务器将自己的socket绑定到一个众所周知的地址上是的客户端能够定位到它的位置. 关键socket API包括以下下几种: socketr()创建一个新的socket. bind()将一个socket绑定到一个地址上.通常服务器需要使用这个调用来将其socket绑定到一个众所周知的地址上使…
<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候都会发生缓冲.通过缓冲可以在一定程度上将用户空间与实际的物理设备分离,还可以减少内核访问磁盘的次数. 先来看看关于内核缓冲区高速缓冲:read和write调用在对磁盘文件进行操作的时候不会直接访问磁盘,如下图所示. 例如:write(fd, "abc", 3) write调用会将"…
<Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组ID. 实际用户ID决定执行者是谁. 有效用户ID决定该进程执行时获取的文件权限.PS:有效用户ID为0的进程拥有超级用户的所有权限. 认识保存设置用户ID(saved set-user-ID)的时候先来看看设置用户ID(set-user-ID)(对于文件的). 如果可执行文件设置了设置用户ID,当该文件执行…
<Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/group. 每个用户都有唯一的用户名和相关的用户标识符(UID).用户可以属于一个或多个组,每个组都有唯一的组名和相关的组标识符(GID). 用户和组的用途为:1.可以确定各种系统资源的所有权:2.对赋予进程访问上述资源的权限加以控制. 首先来看一下密码文件/etc/passwd lancelot@debia…
<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h>文件中的常量. 通过cat 命令查看: lancelot@debian:~/Code/tlpi$ cat /usr/include/limits.h /* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005 Free Software Fo…
<Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过malloc来分配内存,而malloc都基于brk()和sbrk(). #include <unistd.h> int brk(void *end_data_segment); int *sbrk(intptr_t increment); brk()系统调用会将program break设置为end_dat…
<Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此实体分配执行程序所需的系统资源. 从内核的角度来看,进程是由用户内存空间和内核数据结构组成的.程序的代码和代码中的变量存放在用户内存空间,内核数据结构用于维护进程状态信息. 对于每个进程都有一个唯一的进程号(进程ID)(正数),用来标识系统中的某个程序. getpid(),返回调用该函数的进程的进程ID. #…
<Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于Linux的学习记录,因为觉得自己学得不好,老是写不出东西.但是现在觉得学习记录应该坚持写,慢慢就会有收获,坚持写才可以锻炼自己的表达能力. <Linux/Unix系统编程手册>这本书的评价很高,但是个人觉得翻译得不太好.其实终究是因为自己的英文阅读能力太差和没什么钱,只能看翻译版.看了接近一个月,…
<Linux/Unix系统编程手册>读书笔记 目录 第5章: 主要介绍了文件I/O更深入的一些内容. 原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行:这样可以避免竞争状态(两个或多个共享资源的进程或线程的运行结果是一个无法预期的顺序). 以独占方式创建一个文件:对文件是否存在的检查和创建文件属于同一个原子操作.防止新建文件的时候因为检查文件是否存在和新建文件之间发生中断(而其他进程也在新建相同文件名的文件),导致两个进程都认为自己是文件的创建者. 向文件尾部追加数…
<Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) <Linux/Unix系统编程手册>读书笔记3  (创建于4月15日) <Linux/Unix系统编程手册>读书笔记4  (创建于4月20日) <Linux/Unix系统编程手册>读书笔记5  (创建于4月22日) <Linux/Unix系统编程手册>读书笔记…
<Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有更深入的研究一定会写出来. 下图为磁盘分区与文件系统的关系 文件系统中的文件(目录)在i-node表上都有唯一的记录(i-node).i-node通过数据块指针指向数据块,这些数据块就是该i-node对应的文件的数据. i-node与数据块的关系如下: 因为Linux支持很多类型的文件系统,但是每种文件系统的…
Linux下操作系统编程有两本经典APUE即<Advanced Programming in the UNIX Environment>和TLPI<The Linux Programming Interface>,中文版对应<UNIX环境高级编程(第3版)>和<Linux/UNIX系统编程>. TLPI洋洋洒洒英文版1506页,中文版1176页:一共64章节,明显是作为工具书使用.通过目录可以了解本书的结构,以及作者的组织形式. 背景知识及概念:共3章分别介…
本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题. 系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作,进行进程间的通信等. 系统调用与C语言的函数调用类似.但是系统调用的过程比C语言函数调用复杂,开销也大得多. Linux 的系统调用通过 int 0x80 实现,用系统调用号来区分入口函数.操作系统实现系统调用的基本过程是:应用程序调用库函数(API):API 将系统调用号存入 EAX,然后通过中断…
2018-1-30 一.UNIX.C语言以及Linux的历史回顾 1. UNIX简史.C语言的诞生 1969年,贝尔实验室的Ken Thompson首次实现了UNIX系统. 1973年,C语言步入成熟期,人们以其重写了几乎整个UNIX内核. 2. UNIX两大分支:BSD.System V 1969~1979年间,UNIX历经了多个版本,其中从第七版起,UNIX分裂为两大分支:BSD和System V. 加州大学伯克利分校为UNIX开发了许多新特性,然后发布了属于自己的UNIX发布版——BSD.…
TCP的TIME_WAIT状态,超时时间为2倍MSL(IP报文超过TTL前最大生存时间,BSD规范为30s,RFC1122建议为2分钟).…
这篇将一口气学完信号的基本概念,但是有很多的细节,所以篇幅较长,请做好心理准备. (他大爷的,一口气没有学完,太懒了) 有以下主题: 各种不同信号及其用途 内核可能为进程产生信号的环境,以及某一进程向另一进程发送信号所使用的系统调用. 进程在默认情况下对信号的响应方式,以及进程改变对信号响应方式的手段,特别是借助于信号处理器程序的手段,即程序收到信号时自动去调用的函数,由程序员定义. 使用进程信号掩码来阻塞信号,以及等待信号的相关概念. 如何暂停进程的执行,并等待信号的到达. 起始信号的概念还是…
0.目录 1.概念 2.系统资源 3.学习方法 4.从用户的角度来理解 Unix 4.1 登录--运行程序--注销 4.2 目录操作 4.3 文件操作 5.从系统的角度来理解 Unix 5.1 网络桥牌 5.2 bc:Unix 的计算器 5.3 从 bc/dc 到 Web 6.小结 1.概念 概念: Unix 系统包含用户程序和系统内核 内核由多个子系统构成 内核管理所有的程序和资源 进程之间的通信对 Unix 程序是很重要的 什么是系统编程 相关命令: bc 一些术语: 内存空间用来存放程序和…
Kali Linux Web渗透测试手册(第二版) - 1.3 - 靶机的安装  一.配置KALI Linux和渗透测试环境 在这一章,我们将覆盖以下内容: 在Windows和Linux上安装VirtualBox 创建一个Kali Linux虚拟机 更新和升级Kali Linux 为渗透测试配置web浏览器(即在Firefox浏览器下安装一些常用的插件) 创建一个属于自己的靶机 配置网络使虚拟机正常通信 了解靶机上易受攻击的web应用程序 1.5.创建客户端虚拟机 现在,我们准备创建下一个虚拟机…
作者:李春港 出处:https://www.cnblogs.com/lcgbk/p/14673383.html 目录 系统编程 (一)进程 1.进程的概念 2.进程函数接口 (1)fork()在进程内部创建新的子进程 (2)getpid().getppid()查看自身PID号/查看父进程的PID号 (3)wait().waitpid()子进程中资源回收 (4)return 0.exit(0)进程的退出问题 (5)exec函数族(替换子进程) 3.进程的通信 (0)获取唯一的标识符key值ftok…
本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. 本书第一章我们探讨了JavaScri…
Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统编程有关的开发之前,我们需要了解有关的概念. 进程(Process) 当一个进程创建以后,会被分配到一块虚拟内存中. 后面,我们还会知道:描述进程所涉及的所有信息和数据的那条记录叫做 PCB(process control block),每个进程有且仅有一个PCB. 通常,一个程序占用一块资源,不可…
在linux/unix系统中连接SSH远程工作时,输出字符后按Backspace键删除时,会出现^H,这对习惯了按Backspace键删除的用户来说,感觉非常别扭,虽然可以通过Ctrl+Backspace组合键实现删除功能. 可通过stty命令修改终端配置来实现Backspace删除功能.如下: $ id uid=1002(git) gid=1002(git) groups=1002(git) $ stty erase ^h 若要恢复Ctrl+Backspace组合键删除功能,可执行以下命令:…
<Ruby元编程> 第二章 对象模型 类定义揭秘inside class definitions: class关键字更像一个作用域操作符,核心作用是可以在里面随时定义方法. [].methods.grep(/^re/):调用 出Array的所有以re开头的method. Monkeypatch:涉及全局修改,定义某个方法前应该仔细检查该类是否已有同名的方法. 实例对象存放在对象中,方法存放在类中. 类的真相:类本身也是对象.Ruby允许在运行时修改类的信息. Class.instance_me…
UNIX网络编程 第6章 I/O复用:select和poll函数…
UNIX网络编程 第5章 TCP客户/服务器程序示例…
Kail Linux渗透测试培训手册3第二章信息采集 信息收集是网络攻击中最重要的步骤之一.渗透攻击.我们需要收集各种信息目标.该信息收集.攻击成功的概率越大.介绍信息收集的相关工具.本文选自<Kail Linux渗透測试实训手冊> 3.1  Recon-NG框架 Recon-NG是由python编写的一个开源的Web侦查(信息收集)框架.Recon-ng框架是一个强大的工具,使用它能够自己主动的收集信息和网络侦查. 以下将介绍使用Recon-NG侦查工具. 启动Recon-NG框架,运行命令…
iconv命令是运行于linux/unix平台的文件编码装换工具.当我们在linux/unix系统shell查看文本文件时,常常会发现文件的中文是乱码的,这是由于文本文件的编码与当前操作系统设置的编码不同而引起的,这时可以使用iconv进行编码转换,从而解决乱码问题. 解决文本文件乱码问题分3步:1.确定文件编码,2.确定iconv是否支持此编码的转换,3.确定Linux/Unix操作系统编码,4.转换文件编码为与系统编码一致:下面通过对test.txt文件来举例. 1. 使用file命令来确定…