apue专题

Unix环境高级编程开篇-apue.h配置

书就不多说了,被称为Unix下C编程的圣经;不过现在国内貌似部分人都喜欢向别人推荐书,我很怀疑着部分人是不是推荐的每一本都看过。这个我暂时也不敢推荐,因为我也没有看完。 这本书上几乎所有的代码都用到了作者编程的一个头文件:apue.h,但是这个不是ISO C自带的,所以需要配置一下。 我用的这本书是第三版,第三版,第三版 重要的事情说三遍 1:先去这本书的官网把源代码下载下来,传送门 2:

APUE-从SystemV IPC可以学到的设计思路

1. 既然消息队列、信号量、共享内存都有控制数据(结构体),提供一个控制函数对该控制数据进行读写,并且通过一个参数int cmd来决定对该控制数据执行什么控制操作,而且不同的cmd可以有返回值,可以无返回值。增加函数的灵活度。 2. 根据函数的参数,决定是创建一个新的还是打开一个既存的。可以避免把函数写死或写两个函数:创建函数和打开函数。 3. 函数执行的过程,通过设置类似errno的值,解释

APUE-FIFO理解

1.FIFO是一种文件类型。struct stat结构体中st_mode字段指明该文件是否是FIFO类型。可使用宏S_ISFIFO进行测试。2.FIFO操作函数:mkfifo, open, read, write, close, unlink等对文件进行操作的函数。   注:打开FIFO时同其他文件一样可以指定打开标识(如非阻塞,默认是阻塞打开),以及文件访问权限。3.阻塞打开FIFO:只读

APUE-错误处理函数

#include <errno.h> // errno#include <stdarg.h> // 标准C头文件,可变参数#include "ourhdir.h" // 自定义的头文件// static:表示该函数只能在该文件中使用// va_list的指针类型其实是char *// 函数声明中使用static,函数实现的函数头中要表里如一static void err_doit(int

APUE读书笔记-第六章 系统数据文件和信息

昨天看完了,今天来看看第六章。感觉第六章的内容不是非常重要。简单看看吧  6.2 口令文件 口令文件其实就是/etc文件夹下的passwd文件,但处于安全性的考虑,我们无法直接读取它。就是通过直接限制权限的方式对其进行保护,passwd文件具体权限如下: -rw-r--r-- 1 root root 可以看到只有root用户具有读写权限,与root同组的用户与其他用户仅具有读权限。

APUE读书笔记-第五章 标准I/O库

今天草草的把第四章结了,后面的内容分析的也不是很详细,就连书中的例子都没有怎么实验,还是等以后有机会吧。 从5.3节开始研究起吧,这一节主要谈了一个进程预定义的3个流,分别是标准输入、标准输出和标准错误,通过stdin、stdout、stderr引用。这里要和进程中的文件描述符STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO相区分。 /* Standard

APUE读书笔记-第四章 文件和目录

到第四章了,不知什么时候才能把这本书看完,耽误的时间太多了。 第四章是在第三章的基础上,主要描述文件系统的其他性质和文件的性质。 4.2 stat、fstat、fstatat、lstat函数 首先来看看这四个函数的原型: #include <sys/stat.h> ///usr/include/x86_64-linux-gnu/sys/int stat (const char *__

APUE读书笔记-第三章 文件I/O

今天看得挺快的,一下子就把第二章看完了,不过第二章也确实看得不仔细,这一章其实在程序设计中还是非常重要的,因为这一章的内容决定了程序的可移植性。 好了,回到这一章的主题文件I/O。  3.2节主要对文件描述符的概念进行了简单的介绍。根据APUE:文件描述符是一个非负整数。当进程打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。我也简单地翻了一下LKD和《深入理解linux内核》

APUE读书笔记-第二章 unix标准及实现

《程序员的自我修养》这本书的读书笔记就先告一段落了,最后一章的运行时库实现也没有实现,有机会再补上吧。今天又回到APUE,第一章也不给大家分享什么了,这本书的读书笔记从第二章开始。好了开始今天的主题,第二章2.4小节之前关于unix标准与实现的讨论在此也就不详细分析了,从2.5小节开始。  2.5小节主要讨论unix系统中的“限制”,主要包括两类限制: 编译时限制,例如,短整型的最大值是多少。

unix环境高级编程第三版(apue)源代码编译及使用

(1)下载源代码,可以去官网下载:http://apuebook.com/code3e.htm (2)解压缩源代码文件:tar -zxvf src.3e.tar.gz (3)安装libbsd-devel,否则编译会报错不通过,会提示编译threads文件夹里面的内容时报错: /tmp/ccvzZHtf.o: In function `thr_fn':barrier.c:(.text+0x8

apue源码的编译与使用

二.apue源码的编译与使用 1. vim  Make.defines.linux   修改变量WKDIR,指向你的apue源码的位置,我的是/home/hlouyuting/APUE/apue.2e,所以   WKDIR=/home/hlouyuting/APUE/apue.2e   2. vim std/linux.mk   将两个nawk改为gawk   3. vim inclu

fork exec对子进程继承父进程信号处理机制的影响--APUE

当一个进程调用fork时,因为子进程在开始时复制父进程的存储映像,信号捕捉函数的地址在子进程中是有意义的,所以子进程继承父进程的信号处理方式。 特殊的是exec,因为exec运行新的程序后会覆盖从父进程继承来的存储映像,那么信号捕捉函数在新程序中已无意义,所以exec会将原先设置为要捕捉的信号都更改为默认动作。 来源:http://blog.csdn.net/zlgg163/a

APUE——Chapter 10:信号

信号是软件中断。信号提供了一种处理异步事件的方法。 在头文件< signal.h >中,信号名都被定义为正整数常量。 (信号编号) 不存在编号为 0 的信号。 信号处理: (1)忽略此信号。(有两种信号不能被忽略:SIGKILL、SIGSTOP)。 (2)捕捉信号。(不能捕捉 SIGKILL 和 SIGSTOP 信号)。 (3)执行系统的默认动作。 终止+core。大多数Unix

APUE——Chapter 7、8:进程环境和进程控制

Chapter 7:进程环境 当内核执行C程序时,在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址。启动例程从内核取得命令行参数和环境变量值,然后为按上诉方式调用main函数做好安排。 进程终止 8种方式使进程终止, –> 5种正常终止: (1)从main返回。 (2)调用exit。 (3)调用_exit或_Exit。 (4)最后一个线程从其

APUE——Chapter 5:标准I/O库

对于标准I/O库,它们的操作则是围绕流(stream)进行的。 流的定向(stream’s orientation)决定了所读、写的字符是单字节还是多字节的。 freopen函数清除一个流的定向;fwide函数设置流的定向。 #include <stdio.h>#include <wchar.h>int fwide(FILE *fp, int mode);/* 返回值:若流是宽定向的则返回

APUE——Chapter 3:文件I/O

open、read、write、lseek、close。 本章所说明的函数被称为不带缓冲的I/O(unbuffered I/O)。不带缓冲:指的是每个read和write都调用内核中的一个系统调用。这些不带缓冲的I/O函数是POSIX.1和Single UNIX Specification的组成部分。 所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁

apue.h包头找不到的问题

转载之:yafeng_jiang       在运行《UNIX环境高级编程》中的程序时会遇到apue.h包头找不到的情况,这是作者为了方便程序书写封闭了一些功能函数和错误处理等。在http://www.apuebook.com中可以下载到书的所有的实例代码,解压后为apue.2e。         我们把apue.2e中的两个文件拷贝到/usr/include中就行了:      (1

APUE第4章 文件和目录

1、概述 i、本章将描述文件系统的其他特征(如,文件类型、设置用户和组ID、文件访问权限)和文件性质 ii、从stat结构的每一个成员了解文件所有属性 iii、介绍各个可修改属性的函数 iv、UNIX文件系统结构及符号链接 2、函数stat,fstat,lstat及其结构struct stat{...}; #include<sys/stat.h>int stat(const char

APUE第3章 文件I/O

1、概述 UNIX系统中,可用的文件I/O函数——打开文件、读文件、写文件等。而大多数文件I/O只需用到5个函数:open、read、write、lseek以及close。 本章所描述的函数常被称为不带缓冲的I/O。其中不带缓冲指的是每个read和write都调用内核中的一个系统调用。 多进程间共享资源,原子操作。以及多个进程间如何共享文件,以及所涉及的内核有关数据结构。 最后将说明dup

APUE-文件和目录(八)文件时间

文件的时间 与文件相关的三个时间值: 访问时间:最后一次访问文件的时间。例如,cat命令会修改这个时间。修改时间:文件内容最后一次被修改的时间。状态更改时间:文件的i节点最后一次被修改的时间。例如,更改文件的访问权限、更改用户ID、更改链接数都会修改i节点。 注意:系统并不维护对一个i节点的最后一次访问时间,所以access和stat函数并不更改这3个时间中的任一个。 使用ls命令可以查看这

APUE-文件和目录(七)符号链接

符号链接 符号链接的用途 符号链接是对一个文件的间接指针,它与前面介绍的硬连接不同,硬连接指向文件的i节点。引入符号链接是为了避开硬连接的一些限制: 硬链接通常要求链接和文件位于同一文件系统中。只有超级用户才能创建指向目录的硬链接(在底层文件系统支持的情况下)。 而对于符号链接: 对符号链接以及它指向何种对象并无任何文件系统限制;任何用户都可以创建指向目录的符号链接。 跟随符号链接 符号链接一

APUE-文件和目录(六)函数ftw和nftw

名字 ftw,nftw - 文件树遍历 概要 #include <ftw.h>int nftw(const char *dirpath,int (*fn) (const char *fpath, const struct stat *sb,int typeflag, struct FTW *ftwbuf),int nopenfd, int flags);#include <ftw.h>in

APUE-文件和目录(五)函数rename和renameat

rename和renameat #include <stdio.h>int rename(const char *oldname,const char*newname);int renameat(int oldfd,const char *oldname,int newfd, const char *newname);成功返回0;失败返回-1 看下面一段代码,让我们对rename做一下测试

APUE-文件和目录(四)文件系统

一个命令 mkfs 讲文件系统前先介绍一个用于创建文件系统的命令: mkfs mkfs [options] [-t type fs-options] device [size] 描述 mkfs用来在设备上创建一个Linux文件系统,这个设备通常情况下是一个硬盘分区。上面的device参数要么是设备名(例如:/dev/hda1,/dev/sdb2),或者为包含文件系统的一个普通文件。size参数

APUE-文件和目录(三)函数chown 和lchown

下面的几个chown函数可用于更改文件的用户ID和组ID。如果两个参数owner或group中的任意一个是-1,则对应的ID不变。 #include<unistd.h>int chown(const char *pathname,uid_t owner,gid_t group);int fchown(int fd,uid_t owner,gid_t group);int fchownat

APUE-文件和目录(二)函数access,mask,chmod和粘着位

4.7 函数access和faccessat 当一个进程使用了设置用户ID和设置组ID作为另一个用户(或者组)运行时,这时候有效用户(组)ID和实际用户(组)ID不一样,但进程仍然希望测试实际用户(组)ID的访问能力。这时候就可以使用access和faccessat。测试步骤同4.5节一样,但将有效改为实际。 #include <unistd.h>int access(const char