APUE学习笔记
BlitzSkies
这个作者很懒,什么都没留下…
展开
-
apue学习第十天——一个C程序是如何启动和终止的(第七章)
Process environment,本章讲的主要就是一个程序在什么样的一个环境下执行以及怎样执行嘛!好,那从一个小小的main函数看起,一点点把它壮大:#include main(){ printf(hello, world\n);}那么就从这个简单main开始吧。发现它的问题了吧?对第一眼注意的就是,函数没有返回值;可以说,函数结束的时候没有终止状态,或者说它的终止原创 2015-01-06 20:26:22 · 1111 阅读 · 0 评论 -
apue学习第二天(2)——第一个程序myls的执行
经历了重装两次系统,修复引导之后,Ubuntu终于可以正常工作了。中文输入法的ibus和fcitx框架很坑爹,刚开始ibus下的googlepinyin装好了,无奈sublime text中只支持fcitx框架的中文输入,于是试图改成fcitx下的pinyin,无果,最终两个都无法输入中文,没时间了,留待晚上解决,先开始程序。首先是对apue.3e的make问题,上次说过,make的时候出现c原创 2014-12-25 22:06:05 · 1504 阅读 · 0 评论 -
apue学习第十六天——信号(第十章)
好吧,信号这一章,我承认看到一半看不下去了。开始讲kill, raise, alarm还有耐心看一点,后面的sigprocmask, sigaction, sigsetjmp可是真没耐心啦。我倒是认为,这些函数光看不练的话,一毛钱用都没有,再说,我写博客的目的是把逻辑关系理清楚,又不是去罗列知识点。嘿嘿,所以我还是只看下函数作用吧。(持续自我安慰中。。。)OK,那现在开始信号。第一句话原创 2015-01-15 15:51:21 · 1106 阅读 · 1 评论 -
apue学习第四天——第一章的其它内容
前几天周末,加上老板催着改专利,耽误了一些时间,继续开始。首先,实例“图1-4”,copy standard input to standard output(ps:越来越发现看中文版的别扭了)。n = read(STDIN_FILENO, buf, BUFFSIZE)char buf[BUFFSIZE]就不用说了,但是这个BUFFSIZE的取值会影响程序的效率,这个以后会看到。主原创 2014-12-29 21:19:03 · 1143 阅读 · 0 评论 -
apue学习第二十一天——IPC基础(第十五章)
前言:IPC部分写了前言,彰显一下对此部分的重视。这部分的知识总结取自《UNIX环境高级编程的》第14、15章,《UNIX网络编程 卷二:进程间通信》,以及部分博客。APUE书中对IPC的介绍模糊不清,且只讲了XSI IPC的实现(虽然和POSIX IPC大同小异);好在作者W. Richard Stevens在他的另一本书UNPv2中进行了详细论述。在接下来的几篇博文中,首先会介绍IPC基础原创 2015-02-06 13:25:37 · 947 阅读 · 0 评论 -
apue学习第七天(1)——# in C/C++(C/C++中的井号)
终于又回来啦!元旦假期陪同学玩了两天,今天要回归正轨了!直接进入正题:在图3-11中有一段代码不怎么明白:#if !defined(_POSIX_C_SOURCE) ... ...#endif学了那么多年计算机,我也是挺懒的,碰到过很多次这样的语句,每次都是不求甚解的略过。今天呐,又拦在路上,索性解决它吧!我想,几乎所有学习C/C++的童鞋第一次写代码打的第一个字符就原创 2015-01-03 15:10:08 · 1452 阅读 · 0 评论 -
apue学习第二十二天——管道与FIFO
管道与FIFO的区别,就在于 unnamed 和 named 的区别:由于pipe没有名字,一个进程创建pipe之后,只有与它related(有亲缘关系)的进程才会知道这个pipe的存在,所以只能用于related的进程之间的通信;而FIFO是named pipe,不同进程可以获得同一FIFO的name,所以可用于unrelated进程之间的通信。本质上,你可以把pipe想成一个f原创 2015-02-08 15:06:42 · 1288 阅读 · 0 评论 -
aupe学习第九天——文件系统
本文记录的是对昨天第四章内容的补充,来看一下文件系统吧,也就是UNIX怎样存储文件的,这个搞清楚之后,与文件系统相关的函数以及昨天stat结构体中剩下的属性就很容易理解啦!废话不说,直接看图:OK,从上往下,我们一层层来看!首先,对于一个磁盘,可以把它分区,也就是partition,每个分区可以包含一个文件系统;通常我们把一个分区格式化的时候,调用了某种类似于mkfs的函数(m原创 2015-01-05 10:14:58 · 871 阅读 · 0 评论 -
apue学习第七天(2)——文件共享和第三章的其它内容
前面曾经说了APUE第三章前面的几个系统调用,它们都是unbuffered I/O,下面来看看第三章其它的内容。首先是3.9节说的I/O efficiency(I/O效率)问题,前面提到在unbuffered I/O中BUFFSIZE的选择对文件I/O的效率有很大影响,书中图3-6用不同的BUFFSIZE值产生的时间来说明对效率的影响,磁盘块长度的值由st_blksize表示,关于bu原创 2015-01-03 20:52:25 · 1014 阅读 · 0 评论 -
apue学习第九天——标准I/O库(第五章)
这是第五章标准I/O库的内容,花了几个小时浏览了一遍。感觉这些东西在第一遍看的时候没必要太抠细节,用到的时候再查,所以下面只是简单记录,好啦,开始。首先,给stream一个系统的定义:In computer science, a stream is a sequence of data elements made available over time. A stream can be原创 2015-01-05 20:28:43 · 999 阅读 · 0 评论 -
apue学习第八天——文件和目录(第四章)
接下来几章,打算不追究函数细节,快速通过。第四章,讲的主要是文件系统,着重讨论文件和目录的性质,当然啦,我们围绕着一个贯穿全局的stat structure,纵观一个文件的all attributes并详细说明。当然啦,还是那句话,不过细的追究具体函数,用到再查嘛!好啦,要想知道一个file的信息结构,UNIX在#include 中提供了一个很好的system call — sta原创 2015-01-04 21:02:05 · 959 阅读 · 0 评论 -
apue学习第六天——文件I/O(第三章)
今天这些都是Unbuffered I/O啦,神马open,read,write,lseek,colse这些函数。来,我们先看看这个unbuffered的意思,英文版里这句话是这样说的:“The term unbuffered means that each read or write invokes a system call in the kernel.”(我又要吐槽中文版了,你们读原创 2014-12-31 15:05:48 · 1152 阅读 · 0 评论 -
apue学习第五天——UNIX标准及实现(第二章)
第二章开始。但我对它不是很感兴趣,花了不到两个小时翻完了这些内容,简单记录一下吧。首先是标准,它讲了三个标准,分别是ISO C, IEEE POSIX 和 SUS:1)ISO C,ANSI(American National Standards Institution)是ISO(International Organization for Standardization)的美国代表,它的标原创 2014-12-30 16:53:41 · 1273 阅读 · 0 评论 -
apue学习第二十四天——高级I/O、生产者消费者问题、socket(提纲)
马上要过年了,祝愿所有人羊年大吉!ok,其实剩下这三部分也写不完了,下面列一个提纲,以后再补:1. 高级I/O主要讲述非阻塞I/O,记录锁,I/O multiplexing(多路转接)和异步 I/O,memory map;UNPv1中提到了5种I/O处理模型:阻塞I/O;非阻塞I/O也就是不阻塞,直接返回,或是成功,或是错误;I/O多路转接,是构建一张描述符表,原创 2015-02-13 10:59:39 · 1206 阅读 · 0 评论 -
apue学习第一天——不要轻易修改/etc权限
《UNIX环境高级编程》(第三版),记录每天的学习状况。我的基础:计算机体系方面,操作系统和CSAPP阅毕,曾使用过几个月Ubuntu,跑过一些程序,调过一些系统,没在上面写过程序。原创 2014-12-24 18:05:53 · 7371 阅读 · 0 评论 -
apue学习第三天——深度解析apue第三版示例程序编译问题
说“深度解析”,不免贻笑大方了,但菜鸟还是厚着脸皮说吧,初生牛犊不怕虎嘛。从apuebook.com下载第三版源码,解压,make。遇到错误:cannot find -lbsd。遇到这方面错误,也就是缺少libbsd文件,那么添加:$sudo apt-get install libbsd-dev。make,done!下面就是对第三版书中1-3的编译问题了。我的apue.3e源码放在/hom原创 2014-12-26 14:09:07 · 5598 阅读 · 1 评论 -
apue学习第十二天——进程控制1(第八章)
我们开始第八章啦,process control。要说UNIX的进程控制,当然首先说进程的创建、执行和终止啦,对应的也就是fork, exec, exit。那么我们首先来说fork。要说fork,当然先看定义啦:#include pid_t fork(void); /*Returns: 0 in child, process ID of child in parent, −1 o原创 2015-01-08 20:18:35 · 929 阅读 · 0 评论 -
apue学习第十一天(2)——深度剖析auto, register, static, extern
好啦,我们接着上一节继续,上节说到了bss vs data,那我们就从变量开始说起。首先,有几个问题:你知道automatic variable 和 static variable的区别吗?你知道static放在function内部和外部的区别吗?你能说说definition和declaration有什么区别吗?或者问一个看起来貌似最最简单的额问题,你知道什么是变量吗?如果一知半解、不得要原创 2015-01-07 20:24:36 · 1039 阅读 · 0 评论 -
apue学习第十一天(1)——一个C程序的存储和执行
我们把上一节提到的C程序直接扩充到一个命令处理程序的框架,它要实现的功能也就是读取分析命令,对应书中图7-9和7-11代码的合并,看下面代码:#include "apue.h"#include #define TOK_ADD 5jmp_buf jmpbuffer;void do_line(char *);void cmd_add(void);int get_token(v原创 2015-01-07 09:21:16 · 1149 阅读 · 0 评论 -
apue学习第十七天(2)——线程同步
Thread Sychronization,线程同步,我们先来看一个场景,两个或多个进程同时修改一个变量,如图:线程A,B同时进行增量操作。通常,读操作可以一步完成,而写操作(增量操作)可分解为3步:(1)从内存单元读入寄存器(2)将寄存器中变量进行增量操作(3)将新值写回内存单元;由上述步骤分析,最后i的值可能+1,也可能+2。刚才说的这种情况是计算机体系结构引起的竞争,主要是m原创 2015-01-23 22:02:32 · 1225 阅读 · 0 评论 -
apue学习第十八天——从哲学家就餐问题看死锁
搞了几天坑爹的论文整理和专利,这下终于都搞完了,可以继续好好看书啦!前几天看了线程基础以及5种基本的同步机制。那好,对于死锁这个快听腻了的词,先实现一个哲学家问题上的死锁,然后看怎样去解决它。问题描述:也就是一个桌上围五个人,每个人左右手边各有一根筷子(不用管原著中的刀叉啦),先各思考一会(假设思考rand()%10时间吧),然后先拿左手筷子,再拿右手筷子;吃饭(假设吃rand()原创 2015-01-28 19:23:51 · 1738 阅读 · 0 评论 -
apue学习第十四天——进程控制3
这几天进度实在是有点慢(摇摇头~~),好啦,今天把第八章剩下的内容都搞定吧!exec族(这里用了个族,包括七个函数)怎么工作呢?我们来看看:The exec() family of functions replaces the current process image with a new process image. (一语中的)比如说fork了一个子进程,开辟了一个新的空原创 2015-01-10 15:56:39 · 1005 阅读 · 0 评论 -
apue学习第十三天——进程控制2
昨天刚把fork的大致使用情况说清楚对吧?关键就在于“调用一次,返回两次”,其它的都是浮云啦。在最后我们也注意到,当父进程结束并退出返回到shell时,child process被init process“收养”了,那我们就先看看几个special processes吧:swapper: ID = 0;scheduler process, no program on disk corr原创 2015-01-09 11:19:59 · 859 阅读 · 0 评论 -
apue学习第九天——系统数据文件和信息(第六章)
第六章内容很少,先来看system data files。介绍两种:password file和group file。/etc/passwd是一个ASCⅡ文件,姑且翻译成口令文件吧,它的权限是普通用户;/etc/shadow,shadow password翻译成阴影口令,它的权限是superuser,这涉及到安全问题了。单向加密算法把密码转成encrypted password(加密口原创 2015-01-05 21:37:19 · 861 阅读 · 0 评论 -
apue学习第十九天(2)——线程与信号
我们在线程基础中说过,每个线程都有自己的signal mask(信号屏蔽字),也就是单个线程可以筛选某些信号。thread中的信号处理very similar to 进程中的信号处理,比如:(1)pthread_sigmask vs sigprocmask不过需要注意的是,pthread_sigmask失败时直接返回错误码;而sigprocmask失败时设置errno并返回-1;(原创 2015-01-31 14:25:26 · 811 阅读 · 0 评论 -
apue学习第十七天(1)——线程基础(第十一章)
这名义上是第十七天,但线程(第11章)和线程控制(第12章)这两章我着实看了一周,当然,收获也不小。说实话,线程对学过操作系统的菜鸟们来说再熟悉不过,进程与线程的概念区别可以说得头头是道,但是我相信大多数人和我一样,对实现细节只能感叹一声:呵呵。好啦,话不多说,先看线程基础。我们深入的向process内部探究,就可以看到thread,thread是系统调度的最小单位。一个进程里面有原创 2015-01-23 16:58:12 · 1052 阅读 · 0 评论 -
apue学习第十九天(1)——可重入与线程安全(第十二章)
第十二章中的线程属性和同步属性已分在前几篇中说明,本篇继续说第十二章中后面的内容。首先,reentrancy,可重入的概念【wikipedia:reentrancy】:In computing, a computer program or subroutine is called reentrant if it can be interrupted in the middle of原创 2015-01-30 15:08:05 · 837 阅读 · 0 评论 -
apue学习第十五天——进程关系(第九章)
天呐,我有几天没写了啊?!这几天忙着专利第二稿的改写和论文的调研,已经无暇顾及我心爱的apue了。那今天,把第九章搞定吧!内容很简单~第九章名称叫进程关系,也都是写理论和概念上的东西,讲了下面几个方面:终端登录和网络登录;session(会话);job control(作业控制)。那就首先来看terminal(终端)。这个词已经很熟悉了,显示器啊、键盘啊、鼠标啊都是终端,但我们原创 2015-01-14 10:56:20 · 783 阅读 · 0 评论 -
APUE学习第二天(1)——双系统重装Ubuntu出现:error file not found. grub rescue之grub修复
昨天把etc/的权限搞乱了,决定重装系统(换成Ubuntu12.04)。但昨晚重装之后,windows的正版验证失效了,久试无果,这个以后在修复吧,当务之急是把Ubuntu系统调好。因为重装Ubuntu之后是开机linux引导windows,图省事,又想用easyBCD在windows下调整启动顺序,菜鸟在各种自以为是的调整之后,Ubuntu引导又被我搞乱了,看来easuBCD这样的软件菜鸟还是少原创 2014-12-25 13:24:11 · 3591 阅读 · 0 评论 -
《UNIX环境高级编程》学习经验总结
《UNIX环境高级编程》学习经验总结原创 2015-02-13 14:37:34 · 4128 阅读 · 3 评论