本章说明了很多高级I/O功能: 非阻塞I/O——发一个I/O操作,不使其阻塞,记录锁,STREAMS机制 I/O多路转接——select和poll函数 readv和writev函数,以及存储映射I/
注意: 在 i386 平台上 Red Hat Linux 的 页面大小 为 4096 字节。但是,您可以使用 bigpages ,它支持配置更大的内存页面尺寸。...SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX 5.套接字:socket,上面介绍的通讯手段限制了作用域,套接字编程应用则更为广泛...《unix网络编程卷一》对socket编程有详细的介绍。...也属于进程动态分配的内存. 32位就是4G的寻址空间,linux将其分为两部分,虚拟地址从0xC0000000到0xffffffff用于内核,为系统空间。较低的3G字节为用户空间。...而线程的栈空间大小在linux下可以使用ulimit -s查询,我的环境下默认是8192字节。windows下一说默认1M,一说2M。
本章讲的都是一些非常基础的知识,目的是为了下一章讲进程控制做铺垫,所以,本章就不做过多的总结了,直接看图吧。
本章涉及到线程的一些基本知识点,讨论了现有的创建线程和销毁线程的POSIX.1原语,此外,重点介绍了线程同步问题,讨论了三种基本的同步机制:互斥量、读写锁、...
《UNIX环境高级编程(第3版)》是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的第3版。...《UNIX环境高级编程(第3版)》内容权威,概念清晰,阐述精辟,对于所有层次UNIX/Linux程序员都是一本不可或缺的参考书。...适读人群 :所有层次UNIX/Linux程序员 20多年来,严谨的C程序员都是依靠一本书来深入了解驱动UNIX和Linux内核的编程接口的实用知识的,这本书就是W....Richard Stevens所著的《UNIX高级环境编程》。现在,Stevens的同事Steve Rago彻底更新了这本经典著作。...为了使读者能融会贯通,书中还提供了几个贯穿整章的案例,每个案例都根据现在的技术环境进行了全面更新。 《UNIX环境高级编程(第3版)》帮助了几代程序员写出强大、高性能、可靠的代码。
目录 前言 unix基础知识 unix标准化和实现 unix提供的文件IO 文件和目录 标准IO 系统数据文件 前言 笔者将《unix环境高级编程》主要内容总结为三篇:文件篇,进程篇,高级io和进程间通信三大板块...本文是unix环境高级编程系列文章第一篇:文件篇。...unix基础知识 介绍了unix的体系结构,以及unix中的文件和目录,输入输出,程序和进程,信号等基本概念 unix标准与实现 标准包括C语言的标准和操作系统标准,实现包括BSD,FreeBSD,Linux...unix实现 SVR4:AT&T的UNIX系统实验室产品,初版了系统V接口定义 BSD:加州伯克利分校研究和开发的,含有AT&T许可证的代码 FreeBSD:BSD去除AT&T许可证代码后,完全免费的版本 Linux...:1991年Linux开发的一款被目前广泛使用的unix操作系统 Mac OS:核心系统是Darwin,基于Mach内核和FreeBSD的组合 Solaris:sun公司开发的unix系统版本 三. unix
目录 前言 进程环境 进程控制 进程关系 信号 线程 线程控制 高级IO 进程间通信 网络间进程通信:套接字 高级进程间通信 前言 笔者将《unix环境高级编程》主要内容总结为三篇:文件篇,进程篇,高级...本文是unix环境高级编程系列文章第二篇:进程篇。...最后介绍信号和fork对线程的影响 守护进程 主要说明守护进程的特征,常见的系统守护进程,以及守护进程的编程规则。然后介绍处理守护进程的通用日志架构,最后介绍守护进程的一些惯例 一. 进程环境 1....线程标识 线程id:线程的唯一标识 表示:pthread_t数据类型,各个操作系统有不同的具体实现,linux下为无符号的长整形 线程id比较:不能用简单的数值比较,使用pthread_equal函数...意味着单个信号修改了某个信号相关的处理行为,其他线程必须共享这个行为 设置线程信号屏蔽字:pthread_sigmask 等待信号发生:sigwait 发生信号到线程:pthread_kill linux
简介 本章主要讲解网络编程的基础知识,主要包括七层网络模型、常用通信协议、IP地址与子网掩码及端口号、字节序。 七层网络模型 讲到网络首先说一下最常见的网络模型,七层网络模型。...子网掩码:主要用于划分IP地址中的网络地址和主机地址,也可以判断两个IP地址是否在同一个局域网中,具体的划分方法如下: IP地址 & 子网掩码 => 网络地址 + 主机地址 网络编程中需要提供...地址可以定位到具体的某一台主机; 端口号:知道端口号可以定位到主机上的某一个具体的进程; 端口号本质就是unsigned short类型,范围是:0 ~ 65535,但是其中0 ~ 1024之间的端口号被系统占用,因此以后编程时建议从...将低位字节的数据存放在高位内存地址的系统; 小端系统中按照地址从小到大依次为:0x78 0x56 0x34 0x12 大端系统中按照地址从小到大依次为:0x12 0x34 0x56 0x78 一般来说,在网络编程中需要将所有发送到网络中的多字节整数先转换为网络字节序再发送...总结:以上概念都是网络编程中最常见最基础的知识点,这些都需要大家掌握。另预告一下,下一章将讲解非常重要的SOCKET网络编程,希望大家多多关注。
比如getpgid、getpriority、setpriority、sethostname 进程管理:用来保证系统中进程能以多任务在虚拟内存环境下得以运行。...比如 fork、clone、execve、exit等 那为什么一定要用系统调用来访问操作系统的内容呢,其实这可以看做对内核的保护,linux分为用户空间和内核空间,而用户空间是不允许访问内核空间的数据的...引入 cache 层的目的是为了提高 linux 操作系统对磁盘访问的性能。 Cache 层在内存中缓存了磁盘上的部分数据。...另外linux页高速缓存对被缓存页的范围定义的非常宽。缓存的目标是任何基于页的对象,这包含各种类型的文件和各种类型的内存映射。...为了满足普遍性要求,linux使用定义在linux/fs.h中的结构体address_space结构体描述页高速缓存中的页面。
一、总结 在写之前,先唠几句,《UNIX环境高级编程》,简称APUE,这本书简直是本神书,像我这种小白,基本上每看完一章都是“哇”这种很吃惊的表情。...所以,对于那些致力于想在Linux下做开发的人来说,这本说一定是强推的。 如果你分得清write和发fwrite,read和fread这些函数的区别,那这章也许就对你没什么吸引力了。...而诸如fread和fwrite这些标准I/O操作属于用户态操作,具体是库函数的实现,需要借助用户缓冲区来实现(关于用户态和内核态的理解请看Linux探秘之用户态与内核态)。
启动例程从内核取得命令行参数和环境变量值,然后为按照上述方式调用main函数做好安排。...7.4 命令行参数 7.5 环境表 每个程序都接收到一张环境表。跟参数列表一样,环境表也是一个字符指针数组。其中每个指针包含一个以null结束的C字符串的地址。...可以用其取环境变量值。 还可以设置环境变量,比如改变环境变量、增加新的环境变量。...注意:环境表和环境字符串通常占用的是进程地址空间的顶部,所以它不能在向高地址扩展了;同时也不能移动在它之下的各栈帧,所以也不能向低地址方向扩展。 那么是如何实现上述操作的呢?...(这个也需要理解) 1)删除:比较简单,先在环境表中找到改指针,然后将所有后续指针都向环境表首部顺次移动一个位置。
前言 笔者将《unix环境高级编程》主要内容总结为三篇:文件篇,进程篇,高级io和进程间通信三大板块。本文是unix环境高级编程系列文章第三篇:高级IO和进程间通信篇。...该篇主要包括: 高级io 先介绍记录锁的概念和记录锁的数据结构。然后介绍阻塞io,非阻塞IO,异步io,IO多路转接等概念,后者都是针对前者更优的技术。...然后介绍socket编程的连接建立,数据传输等。 高级进程间通信 高级进程间通信提供一种可以在进程间传递文件描述符的机制,包括STREAMS管道和unix域套接字 一. 高级IO 1....sa_famliy_t sa_famliy; char sa_data[]; } 复制代码 套接字实现可以自由添加aa_data字段以及长度 //linux...高级进程间通信 1.
在linux中,可以使用sysctl命令观察和修改内核配置参数。还可以运行ipcs -l以显示IPC的相关限制。
本章重点介绍了进程控制的几个函数:fork、exec族、_exit、wait和waitpid等,主要需要掌握的是父进程和子进程之间的运行机制,怎么处理进程的...
一、总结 文件I/O一章讲了不带缓冲的I/O,本章讲的是带缓冲的I/O。不带缓冲针对的是内核的系统调用,而带缓冲针对的是用户空间的标准库函数,是基于带缓冲的...
因此时间处理成为了许多Linux开发者的梦魇,遇到时间处理往往避之不及。不过只要你稍微花费一点点精力,学会在Linux上优雅的处理时间和日期也并不是什么难事。...对于Linux世界来说这个时间的起点是1970年1月1日0时(UTC),又被叫做Epoch,Linux上以此为起点的均为UTC时间。...这也是Linux上不同时间表示法的共通之处。 Linux上最常见的时间存储方案有四种:time_t,struct tm,struct timeval和struct timespec。...这就是为什么在Linux上处理时间问题会成为噩梦的原因之一。...在不引入第三方库和自己手动计算的情况下,Linux处理时区的手段只有以下两种: 函数自己定义参数和返回值使用local time还是UTC time; 系统根据环境变量TZ以及配置文件/etc/localtime
可能会很奇怪,因为根目录下每个用户(学生)都应该配了apue开发环境,但是为啥就我一个和另外一个14级的学生呢,其实也正常,因为我只是一个普通用户,访问不了其他用户的目录文件。...之后就开始翻书查函数调用方法开始着手写了起来,就是在递归的过程中发现如果递归深度过大会直接退出程序,需要一定的剪枝比如不是目录文件就直接统计,打不开就直接返回,总体来说,这次实验对我来说是一次不小的挑战,但完成任务之后还是对自己unix环境下...c语言编程有很大帮助的。
在UNIX环境高级编程(APUE)中提到了守护进程的创建方法,思路很清晰,所以这里通过代码具体研究下。 1 完整程序:单实例守护进程 根据APUE的介绍,创建守护进程基本需要如下7个步骤。...daemon_process.c * @Describe A simple example for creating a single object of daemon process in linux...\n" ); while(1) sleep(120); return 0; } 2 程序编译 使用《Linux C/C++工程中可生成ELF、动/静态库文件的通用Makefile...接着由于第二个进程(PID:25873)退出,那么它的子进程(PID:25874)执行第121行的打印语句;在关闭了所有文件描述符后,该子进程(PID:25874)打开标准输入/输出/错误流,最后该子进程成为由Linux...level(LOG_EMERG、LOG_ERR、LOG_WARNING等)和日志文件类型facility(LOG_CRON、LOG_MAIL、LOG_SYSLOG和默认的LOG_USER等)把进程的内容输出到Linux
如图,softlinuxlinux01是用ls -lh建立的软链接,指向linux01.c然后运行4.1.c(此时是用lstat函数),之后手动修改为stat,然后重新编译运行对比如下: ?
Shell 高级编程 Shell 更多是被看成一种批处理命令,确实很多是是吧 Shell当成批处理去使用的。 我确不这么看,我认为要想开发程序一样去写Shell,把Shell当成一种语言。
领取专属 10元无门槛券
手把手带您无忧上云