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命令查看。
To be continued...
APUE学习笔记-一些准备的更多相关文章
- APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...
- APUE学习笔记3_文件IO
APUE学习笔记3_文件IO Unix中的文件IO函数主要包括以下几个:open().read().write().lseek().close()等.这类I/O函数也被称为不带缓冲的I/O,标准I/O ...
- apue学习笔记(第一章UNIX基础知识)
总所周知,UNIX环境高级编程是一本很经典的书,之前我粗略的看了一遍,感觉理解得不够深入. 听说写博客可以提高自己的水平,因此趁着这个机会我想把它重新看一遍,并把每一章的笔记写在博客里面. 我学习的时 ...
- APUE学习笔记(2):lseek()练习与文件洞
对于lseek函数早在大一的C语言课上就有接触,但是几乎没有使用过,只记得是和文件偏移操作相关的 看了APUE上的示例,又使用od工具查看了内容,果然很神奇,很新鲜 figure3.2.c [c] # ...
- APUE学习笔记(1):APUE运行环境
APUE全称<Advanced Programming in the UNIX Environment>(UNIX环境高级编程) 书中例子大都使用作者自己写的头文件,所以需要解决一下,还好 ...
- apue学习笔记(第十七章 高级进程间通信)
本章介绍一种高级IPC---UNIX域套接字机制,并说明它的应用方法 UNIX域套接字 UNIX域套接字用于在同一台计算机上运行的进程(无关进程)之间的(全双工)通信.相比于因特网套接字,UNIX域套 ...
- APUE学习笔记-文件I/O
这次回顾APUE中第三四章的内容,主要是文件I/O操作相关的接口函数. UNIX系统的文件I/O是不带缓冲的I/O,不带缓冲是指每个read和write都调用系统内核的一个系统调用. 1.文件描 ...
- APUE学习笔记——10.18 system函数 与waitpid
system函数 system函数用方便在一个进程中执行命令行(一行shell命令). 用法如下: #include <stdio.h> #include <stdlib.h> ...
- APUE学习笔记——11 线程基础
线程标识 线程由线程号进行标识.线程号仅在线程所属的进程环境中有效.也就是说属于不同进程的两个线程可能线程号一样. 线程标识用结构体pthread_t tid表示.与线程Id相关的函数如下: 比较两个 ...
随机推荐
- google搜索新姿势
大前提:英文Google→http://www.google.com或http://www.google.cn 第一篇 在搜索框上输入:"indexof/"inurl:lib 再按 ...
- MapKit框架使用
MapKit框架使用 一.地图的基本使用 1.简介 MapKit:用于地图展示,例如大头针/路线/覆盖层展示等(着重界面展示) 使用步骤: 导入主头文件 MapKit/MapKit.h MapKit有 ...
- 记RedisDesktopManager的一次崩溃
redis3.2的配置文件中有bind监听地址 bind 192.168.42.131默认bind的填写的127.0.0.1这样配置是只允许本地访问,如果想远程访问就改为本机网卡绑定的ip地址.我这边 ...
- Derby使用2—C/S模式
零.回顾 这部分先来回顾一下上一篇博客中的主要内容.上一篇博客中主要简单介绍了Derby数据的历史,特点,安装以及使用的两种模式.这篇文章主要介绍这两种模式中的一种模式 一.启动服务端程序 第一部分主 ...
- 【剑指Offer学习】【面试题19 :二叉树的镜像】
题目:请完毕一个函数,输入一个二叉树,该函数输出它的镜像. 二叉树结点的定义: /** * 二叉树的树结点 */ public static class BinaryTreeNode { int va ...
- 获取java项目 classpath目录
this.getClass().getResource("/").getPath(); 从根目录获取载入文件: this.getClass().getResourceAsStrea ...
- Java基础知识强化之IO流笔记46:IO流练习之 把文本文件中数据存储到集合中的案例
1. 把文本文件中数据存储到集合中 需求:从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合. 分析: 通过题目的意思我们可以知道如下的一些内容, 数据 ...
- Eclipse错误
1.java compiler level does not match the version of the installed java project facet 解决:http://blog. ...
- LUN 和 LVM 知识
LUN是对存储设备而言的,volume是对主机而言的. lun是指硬件层分出的逻辑盘,如raid卡可以将做好的400G的raid5再分成若干个逻辑盘,以便于使用,每一个逻辑盘对应一个lun号,OS层仍 ...
- pthread
pthread是UNIX操作系统中创建和控制线程的一系列API,通过了解这些API,可以更加清晰的理解线程究竟是什么. 调用pthread的API首先要包含<pthread.h>这一头文件 ...