首先说说unix和linux的区别: linux和unix的最大的区别是,前者是开发源代码的自由软件,而后者是对源代码实行知识产权保护的传统商业软件。...linux不源于任何版本的unix源代码,并不是unix,而是一个类似于unix的操作系统。 linux的核心源代码是免费的,自由使用的,核心源代码是开放的,而unix的核心并不公开。...linux是一套遵从POSIX(可移植操作系统环境)规范的一个操作系统,它能够在普通PC计算机上实现全部的UNIX特性,具有多任务、多用户的能力。...在对硬件的要求上,linux比unix要低,没有unix那么苛刻,linux可运行在多种硬件平台上,而unix系统大多是与硬件配套的,是硬件厂商针对自己的硬件平台的操作系统。...我在大学时用的是Ubuntu和Redhat,当时很喜欢Ubuntu出色的桌面,后来在互联网公司工作,发现基本装的都是Centos 6.5。
1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。...* 如果一个进程同时有实时信号和标准信号在pending,则优先响应标准信号。...登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个Session。...当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。...不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也能继续下载。 此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。
Unix命令行程序和内建指令(更多) 文件系统 ▪ cat▪ cd▪ chmod▪ chown▪ chgrp▪ cksum▪ cmp▪ cp▪ du▪ df▪ fsck▪ fuser▪ ln▪ ls▪...f -name '*.txt' -print0 | xargs --null perl -pi -e 's/Windows/Linux/' 3....`echo \\\b`//g" # 外层的双括号是必须的(Unix环境) sed 's/....在上一个脚本所产生的那一行邮件头的基础上进一步的将非电邮 # 地址的部分剃除。...在上一个脚本所产生的那一行邮件头的基础上进一步的将非电邮 # 地址的部分剃除。
UNIX Domain Socket也提供面向流和面向数据包两种API接口,类似于TCP和UDP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。...使用UNIX Domain Socket的过程和网络socket十分相似,也要先调用socket()创建一个socket文件描述符,address family指定为AF_UNIX,type可以选择SOCK_DGRAM...UNIX Domain Socket与网络socket编程最明显的不同在于地址格式不同,用结构体sockaddr_un表示,网络编程的socket地址是IP地址加端口号,而UNIX Domain Socket...三、UNIX域套接字编程注意点 1、bind成功将会创建一个文件,权限为0777 & ~umask 2、sun_path最好用一个绝对路径 3、UNIX域协议支持流式套接口与报式套接口 4、UNIX...参考: 《Linux C 编程一站式学习》 《TCP/IP详解 卷一》 《UNP》
linux函数分析查询工具 1.优先推荐linux 中man命令 2.一个不错的中文Linux手册:http://cpp.ezbty.org/manpage 3.在线查英文Man手册: http://www.kernel.org...ls、cat 和 passwd 放在这里,还有 shell。例如,请试试 man bash。 man2 用来访问 UNIX 内核提供的服务的系统调用或函数。...man4 特殊文件,比如设备和驱动程序。 man5 文件格式。UNIX 几乎完全使用文本配置文件定制系统的操作。...Unix下的设备有“块设备”和“字符设备”的概念,所谓块设备,就是以一块一块的数据存取的设备,字符设备是一次存取一个字符的设备。磁盘、内存都是块设备,字符设备如键盘和串口。...5.linux驱动程序中字符设备和块设备的三点区别 1.字符设备只能以字节为最小单位访问,而块设备以块为单位访问,例如512字节,1024字节等 2.块设备可以随机访问,但是字符设备不可以 3.字符和块没有访问量大小的限制
shell还是一个功能强大的编程语言,易于编辑,易于调试,灵活性强,shell是结识知识性的脚本语言,在我们shell中直接调用Linux的系统命令操作即可。 2....Shell的分类 (1)Bourne Shell(bshell) 从1979年在unix系统就开始使用了。...是不能兼容,它们之间是独立的 bash和sh是可以互相兼容的 3....Linux中支持的shell (1)查看Linux中的shell脚本 4....Shell的控制语句 (1)if控制语句 if 条件判断 then 内容 fi 目录不存在就创建该目录 目录存在就显示目录种的文件和目录 判断score的等级 (2)for
1 Unix体系结构 ? 操作系统可定义为一种软件,它控制计算机硬件资源,又称之为内核(kernel)。 内核的接口被称为系统调用(system call)。...(系统调用和库函数的比较在最后) 2 列出一个目录中所有文件的名字,也就是命令ls的实现 Figure 1.3....我们需要提供自编的函数来处理它 10 系统调用与库函数 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。...fd是一个整型值,每新打开一个文件,所获得的fd为当前最大fd加1(Linux系统默认分配了3个文件描述符值:0-standard input,1-standard output,2-standard...在用户空间和内核空间,对文件操作都使用了缓冲区,例如用fwrite写文件,都是先将内容写到用户空间缓冲区,当用户空间缓冲区满或者写操作结束时,才将用户缓冲区的内容写到内核缓冲区,同样的道理,当内核缓冲区满或写结束时才将内核缓冲区内容写到文件对应的硬件媒介
第10章 I/O重定向和管道 输入/输出重定向允许完成特定功能的程序通过交换数据来进行相互协作 Unix默认规定程序从文件描述符0读取数据,写数据到文件描述符1,将 错误信息输出到文件描述符2.这三个文件描述符称为标准输入...,标准输出 和标准错误输出 当登陆到Unix系统中,登陆程序设置文件描述符0,1,2.所有的连接, 文件描述符都会从父进程传递到子进程.他们也会在调用exec时被传递 创建文件描述符的系统调用总是使用最低可用文件描述符号
第13章 基于数据报(Datagram)的编程:编写许可证服务器 数据报是从一个socket发送到另一个socket的短消息.数据报socket是不连接的, 每个消息包含有目的地址.数据报(UDP)socket...记录系统状态的服务器必须设计成可以处理服务器和客户端的崩溃事件....有些许可证服务器为一个网络上的多个机器提供服务.有几种设计方法,各有优缺点. socket可以有两种类型的地址:网络或者本地.本地的socket地址叫做Unix域socket 或名字socket.这种socket
第8章 进程和程序:编写命令解释器sh Unix通过将可执行代码装入进程并执行它来运行一个程序.进程是 一个程序所需的内存空间和其他资源的集合 每个运行中的程序在自己的进程中运行.每个进程都有一个唯一的...进程ID,所有者,大小及其他属性 系统调用fork通过复制进程来建立一个几乎和原来进程完全相同的 副本进程.这个新建的进程被称为子进程 一个程序通过调用exec函数族在当前进程中执行一个新的程序 一个程序能通过调用...wait来等待子进程的结束 调用程序能将一个字符串列表传给新程序的main函数.新的程序能通过 调用exit来回传一个8位长的值 Unix shell通过调用fork, exec, wait来运行程序...&status); wait暂停调用它的进程直到子进程结束 最终子进程会结束任务并调用 exit(n) 键盘信号发给所有连接的进程 execvp/exit call/return 这种通过参数和返回值在拥有私有数据的函数间通信的模式是结构化程序...设计的基础 全局变量和fork/exec 全局变量会破坏封装原则,但有时候去掉会更糟糕.Unix提供方法来建立 全局变量,环境是一些传递给进程的字符串型变量集合 execvp不是一个系统调用,而是一个库函数
到了 1973 年,UNIX 系统的绝大部分源代码都用C语言进行了重写,这为提高 UNIX 系统的可移植性打下了基础(之前操作系统多采用汇编语言,对硬件依赖性强),也为提高系统软件的开发效率创造了条件。...、编程语言、网络协议这三个领域影响至今。...总结一下 Linux 和 UNIX 的关系/区别 Linux 是一个类似 Unix 的操作系统,Unix 要早于 Linux,Linux 的初衷就是要替代 UNIX,并在功能和用户体验上进行优化,所以...Linux 模仿了 UNIX(但并没有抄袭 UNIX 的源码),使得 Linux 在外观和交互上与 UNIX 非常类似。...1) 内核层 内核层是 UNIX/Linux 系统的核心和基础,它直接附着在硬件平台之上,控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行,从而扩展硬件的功能,提高资源的利用效率,为用户提供方便
UNIX:一个多用户和多任务的计算机操作系统,主要的用户界面是命令行界面。...UNIX的设计理念:在UNIX系统中所有的东西都是文件,所有系统配置数据都存储在正文文件中,每个系统命令都很小、只完成单一功能,避免使用俘获用户的接口,将多个程序串接在一起以完成复杂的任务。...Linux内核的诞生:诞生于1991年10月5日,芬兰的一名大学生Linus Torvalds编写,1992年Linux与其他GNU软件结合,完全自由的操作系统正式诞生,被称为GNU/LInux或简称Linux...Linux系统特性:自由软件、低成本、源代码开放,安全、可靠、和稳定,多用户多任务系统,丰富的网络功能,标准兼容性和可移植性,良好的用户界面。
第9章 可编程的shell,shell变量和环境:编写自己的shell Unix shell 运行一种成为脚本的程序.一个shell脚本可以运行程序,接受 用户输入,使用变量和使用复杂的控制逻辑 if.....then 语句依赖于下属惯例:Unix程序返回0以表示成功.shell使用 wait来得到程序的退出状态 shell编程语言包括变量.这些变量存储字符串,他们可以在任何命令中使用.shell 变量是脚本的局部变量...环境用来保存会话(session)的全局设置和某个程序的参数设置,shell允许 用户查看和修改环境 shell是有个编程语言解释器,这个解释器解释从键盘输入的命令,也解释 存储在脚本中的命令序列 shell...包括两类变量:局部变量和环境变量 对变量的操作: 赋值 var=value 引用 $var 删除 unset var 输入 read var 列出变量 set 全局化 export var code /
第5章 连接控制:学习stty 内核在进程与外部世界之间交换数据.外部世界包括磁盘文件,终端与外部 设备,磁盘文件与终端的链接有相似之处也有差异 磁盘文件与设备文件都有名字,属性,和权限位.标准文件系统调用...open,read write,close,lseek可被用于文件与设备.文件权限位以同样的方式应用于 控制设备文件和磁盘文件的关闭 到磁盘文件的连接在处理和传输数据方面不同于到设备文件的连接.内核中...管理与设备链接的代码被称为设备驱动程序.通过使用fcntl ioctl,进程 可以读取和改变设备驱动程序的设置 到终端的链接是如此的重要,以致函数tcgetattr tcsetattr 专门用来提供 对终端驱动器的控制...Unix命令stty使得用户能够访问tcgetattr tcsetattr函数 测试位 if (flagset & MASK)… 置位flagset |= MASK 清除位flagset &= ~MASK
第11章 连接到近端或远端的进程:服务器与Socket(套接字) 一些程序被作为单独的进程建立起来来接受和发送数据.在客户/服务器模型中, 服务器进程为客户进程提供处理或数据服务 客户/服务器系统包含通信系统和协议...是一个未连接的通信端点,也是一个潜在 的文件描述符.客户进程通过把自己的socket和服务器端的socket相连来创建一个 通信连接 sockets之间的连接可以扩展到另一台机器上.每个socket以机器地址和端口来标识...到管道和socket的连接使用文件描述符.文件描述符为程序提供了与文件,设备和 其他的进程通信的统一编程接口 Unix中的计算器:bc bc在内部启动了dc计算器程序,并通过管道与其进行通信 从bc方法中得到的思想...进程,而要与远端进程连接,需要使用socket 客户和服务器 服务器是提供服务的程序,是一个进程,等待请求,处理请求,然后循环回去 等下一个请求.客户端进程只要建立连接,与服务器交换数据即可 主机名和端口...运行于因特网上的服务器其实是某台计算器上运行的一个进程.服务器在该 主机拥有一个端口.主机和端口的组合才标识了一个服务器 协议 协议是服务器和客户之间交互的规则.每个客户/服务器模型都必须定义一个 协议并遵守
第三章 目录与文件属性:编写ls 磁盘上有文件和目录,文件和目录都有目录和属性.文件的内容可以是任意的数据, 目录的内容只能是文件名或者子目录名的属性 目录中的文件名和子目录名指向文件和其他的目录,内核提供了系统调用来读取目录的...内容,读取和修改文件的属性 文件类型,文件的访问权限和特殊属性被编码存储在一个16位整数中,可以通过 掩码技术来读取这些信息 文件所有者和组信息是以ID的形式保存的,它们与用户名和组名的联系保存在 passwd...和group数据库中 自己编写ls,需要掌握三点: 如何读取目录的内容 如何读取并显示文件的属性 给出一个名字,如何判断是目录还是文件 把多种信息编码到不同的字段是一种常用的技术,如电话号码,IP字段等
第7章 事件驱动编程:编写一个视频游戏 有些程序的控制流很简单.而另外一些则要响应外部的事件.一个 视频游戏要响应时钟和用户输入,操作系统也要响应时钟和外设 curses库有一些可以管理屏幕显示字符的函数...进程能告知内核哪些信号在什么时候阻塞或忽略 有些函数执行一些复杂的任务是不能被打断的.程序可以通过小心地 使用信号掩码来保护这些临界区代码 curses库基本函数: initscr() 初始化curses库和tty...c,’s’) clear() 清屏 standout() 启动standout模式(一般使屏幕反色) standend() 关闭standout模式 调用pause 可以挂起进程直到有一个信号被处理 Unix
第一章 Unix系统编程概述 程序中所有对设备的操作都是通过内核进行的 在登陆过程中,当用户名和密码通过验证后,系统会启动一个叫做shell的进程,然后把 用户交给这个进程,由这个进程处理用户的请求,每个用户都有属于自己的...shell进程 ps命令可以列出系统中运行的所有进程 自己动手实践一个more,用来查看文件 Unix编程不是很难,但也不是轻而易举的事情 计算机系统中包含了很多系统资源,如硬盘,内存,外围设备,网络连接等...,程序利用 这些资源来对数据进行存储,转换和处理 多用户系统需要一个中央管理程序,Unix的内核就是这样的程序,它可以对程序和资源进行管理 用户程序访问设备必须通过内核 一些Unix的系统功能是由多个程序的协作而实现的...要编写系统程序,必须对系统调用和相关的数据结构有深入的理解 code #include #define PAGELEN 24 #define LINELEN 512 void
第14章 线程机制:并发函数的使用 执行线路即为程序的控制流程.pthreads的线程库允许程序在同一时刻运行多个函数 同时执行的各函数都拥有自己的局部变量,但共享所有的全局变量和动态分配的数据空间 当线程共享变量时...,必须保证他们不会发生共享冲突.线程使用互斥锁保证在某一时刻只有 一个线程在对共享变量访问 线程间通过条件变量来互相通知和同步数据.一个线程挂起并等待着条件变量按照某种特定 方式变化,而另一个线程则发出信号使得条件变量发生变化...线程需要使用互斥量来避免对于共享资源操作函数的访问冲突.非重入的函数必须按照 这种方式进行保护 进程间可以通过管道 socket 信号 退出/等待以及运行环境来进行会话.线程因为是在 一个单独的进程中运行,共享全局变量,因此线程可以通过设置和读取这些全局变量来
第四章 文件系统:编写pwd Unix将存储在磁盘中的数据组织成文件系统.文件系统是文件和 目录的组合,目录是名字和指针的列表.目录中的每一个入口指向 一个文件或目录.目录包含指向父目录和子目录的入口...Unix文件系统包含三个主要部份:超级块,i-节点和数据区域....节点号可能以不同的名字出现在若干个目录中.每个入口 被称为指向文件的硬链接.符号链接是通过文件名引用文件,而不是 i-节点号 若干个文件系统的目录树可被整合成一棵树.内核将一个文件系统的 目录链接到另一个文件系统的根的操作称为装载 Unix...包含若干种系统调用,允许程序员进行创建和删除目录,复制指针 删除指针,改变链接和分离其他文件系统等的操作 目录与文件操作相关的系统调用: 创建目录 mkdir 删除目录 rmdir 删除文件 unlink...创建文件链接 link 改变文件或目录的名字和位置 rename 改变进程的当前目录 chdir code /* spwd.c: a simplified version of pwd *
领取专属 10元无门槛券
手把手带您无忧上云