APUE学习-记录一

  从开始看APUE已经有快一个星期了,由于正好赶上这几天清明节放假,难得有了三天空闲假期可以不受打扰的学习APUE,现在已经看完前六章了,里面的大部分例程也都亲自编写,调试过了。但总觉得这样学过就忘,因此决定把这个学习过程记录下来,学到后面章节的时候回顾前面的章节,做到温故知新。也可以将自己在学习过程中遇到的问题记录下来。

  本书对UNIX系统的提供的接口的方方面面进行了讲解,中间还穿插介绍了很多UNIX或类UNIX系统的相关知识,即使现在我只是看过了前六章,也感觉学到了不少知识,解决了我以前对LINUX系统的不少疑惑。每天都能够学习到自己不知道的东西,感觉很好。

  本书提供了全书的所有例程,可以在该网站获取:http://www.apuebook.com/code3e.html,我用的是第三版,大家可以根据自己的情况选择下载。但是在第一个例程就遇到了问题,写完程序,编译,报错:$gcc c1_3.c

  /tmp/cchudidN.o: In function `main‘:
  1_3.c:(.text+0x20): undefined reference to `err_quit‘
  1_3.c:(.text+0x5b): undefined reference to `err_sys‘
  collect2: ld returned 1 exit status

  (由于已解决了该问题,也未记录,因此该错误我是引用自这篇文章,也是根据该同学的方法设置好了整个需要的配置环境;

  http://blog.csdn.net/blitzskies/article/details/42171089)

  err_quit与err_sys函数都是在apue.h中定义的,虽然在程序中引用了,但gcc编译时需要自己指定引用的外部库,printf这些是系统的库,已经在环境变量中指定了,不需要我们指定。但我们需要的这个库在哪呢,现在就要回到我们下载的那个apue文件包了,解压,文件目录下有个README,里面清楚的说了,make一下(make命令的作用是保持一组程序最新,用于在处理大型程序修改后,自动处理由于模块间复杂的依赖关系而需要重新编译的那些模块的工作)。然后我们会在lib文件夹中发现libapue.a文件(.a文件是LINUX系统中的静态链接库文件),这就是我们需要的库文件。然后我们要把它引入我们的LIBRARY_PATH环境变量中,还有就是我们在每个例程程序中都会引用的apue.h,它在include文件夹中,我们要把它引入C_INCLUDE_PATH环境变量中,设置这两个变量的目的是让程序可以找到库文件与头文件,输入命令:

每次编译程序时都加入-lapue,就没问题了

运行结果如下:

第一章主要是UNIX导论,所有的部分在后面章节都会详细讲解。

第二章主要是UNIX标准的介绍,不同系统上的实现上的一些区别。有几个函数,用来告诉你特定系统上实际支持的限制:

#icnlude <unistd.h>

long sysconf(int name);

long pathconf(const char *pathname,int name);

log fpathconf(int fd,int name);

sysconf函数中的参数name用于标识系统限制,若系统支持,则返回相应值,出错返回-1。

pathconf与fpathconf用于获取name标识对pathname所指文件的限制与否,若系统支持,则返回相应值,出错返回-1。

当有系统函数不了解是可以用man命令查看。

就这样。。。

时间: 2024-08-05 01:10:52

APUE学习-记录一的相关文章

apue学习记录——配置apue.3e,实现P4‘ls例子

1 #include"apue.h" 2 #include<dirent.h> 3 4 int main(int argc,char *argv[]) 5 { 6 DIR *dp; 7 struct dirent *dirp; 8 9 if(argc != 2) 10 err_quit("usage:ls directroy_name:"); 11 if((dp = opendir(argv[1])) == NULL) 12 err_sys("

APUE 学习笔记(九) 高级I/O

1. 非阻塞I/O 低速系统调用时可能会使进程永远阻塞的一类系统调用,包括以下调用: (1)某些文件类型你(网络socket套接字.终端设备.管道)暂无可使用数据,则读操作可能会使调用者永远阻塞 (2)如果数据不能立即被(1)中文件类型接受,则写操作会使调用者永远阻塞 (3)某些进程间通信函数 非阻塞I/O使我们可以调用open.read.write这样的I/O操作,并使这些操作不会永远阻塞,如果这种操作不能完成,则调用立即出错返回 对于一个给定的文件有两种方法对其指定非阻塞I/O: (1)调用

APUE学习笔记:第四章 文件和目录

4.1 引言 本章将描述文件的特征和文件的性质 4.2 stat.fstat和lstat函数 #include<sys/stat.h> int stat(const char *restrict pathname,struct stat *restrict buf); int fstat(int filedes,struct stat *buf) int lstat(const char *restrict pathname,struct stat *restrict buf); 三个函数的返

APUE 学习笔记(二) 文件I/O

1. 文件I/O 对于内核而言,所有打开的文件都通过文件描述符引用,内核不区分文本文件和二进制文件 open函数:O_RDONLY  O_WRONLY  O_RDWR create函数: close函数:关闭一个文件时还会释放该进程加在该文件上的所有记录锁 lseek函数:显式地为一个打开的文件设置其偏移量 每个打开的文件都有一个与其相关联的 "当前文件偏移量",用以度量从文件开始处计算的字节数,通常,读.写操作都从当前文件偏移量处开始,并使偏移量增加所读写的字节数 文件偏移量可以大于

APUE学习笔记:第三章 文件I/O

3.1 引言 术语不带缓冲指的是每个read和write都调用内核中的一个系统调用.这些不带缓冲的I/O函数不是ISO C的组成部分,但是,它们是POSIX.1和Single UNIX Specification的组成部分 3.2 文件描述符 UNIX系统shell使用文件描述符0与进程的标准输入相关联.文件描述符1与标准输出相关联.文件描述符2与标准出错输出相关联. 在依从POSIX的应用程序中,幻数0.1.2应当替换成符号常量STDIN_FILENO,STDOUT_FILENO和STDERR

APUE学习笔记:第六章 系统数据文件和信息

6.1 引言 UNIX系统的正常运行需要使用大量与系统有关的数据文件,针对这些数据文件的可移植接口是本章的主题.本章还介绍了系统标识函数.时间和日期函数 6.2 口令文件 UNIX系统的口令文件包含了下列各字段,这些字段包含在<pwd.h>中定义的passwd结构中 用户名 char *pw_name 加密口令 char *pw_passwd 数值用户ID uid_t pw_uid 数值组ID gid_t pw_gid 注释字段 char *pw_gecos 初始工作目录 char *pw_d

APUE学习笔记:第八章 进程控制

8.1 引言 本章介绍UNIX的进程控制,包括创建新进程.执行程序和进程终止.还将说明进程属性的各种ID-----实际.有效和保存的用户和组ID,以及他们如何受到进程控制原语的影响.本章还包括了解释器文件和system函数.本章最后讲述大多数UNIX系统所提供的进程会计机制.这种机制使我们能够从另一个角度了解进程的控制功能. 8.2 进程标识符 每个进程都有一个非负整型表示的惟一进程ID.因为进程标识符是惟一的,常将其用作其他标识符的一部分以保证其惟一性.虽然是惟一的,但是进程ID可以重用.(大

APUE学习笔记:第五章 标准I/O库

5.1 引言 标准I/O库处理很多细节,例如缓冲区分配,以优化长度执行I/O等.这些处理不必担心如何使用正确的块长度.这使得它便于用户使用,但是如果不较深入地了解I/O库函数的操作,也会带来一些问题 5.2 流和FILE对象 对于ASCII字符集,一个字符用一个字节表示.对于国际字符集,一个字符可用多个字节表示.标准I/O文件流可用于单字节或多字节字符集. 流的定向决定了所读.写的字符是单字节还是多字节的.当一个流最初被创建时,它并没有定向.如若在未定向的流上使用一个多字节I/O函数,则将该流的

Python学习记录-2016-12-17

今日学习记录 模块: import os#导入os模块 import sys#导入sys模块 os.system("df -h")#执行df -h命令 cmd_res = os.popen("df -h").read()#将命令的返回结果赋值给cmd_res,如果不加入.read()会显示命令的返回加过在内存的位置 print(sys.path)#显示系统变量路径,一般个人模块位于site-packages下,系统模块位于lib下 print(sys.argu[2]