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相关的函数如下: 比较两个 ...
随机推荐
- Linux中find、grep命令详细用法
在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 ...
- [每日一题] 11gOCP 1z0-053 :2013-10-7 the backup of MULT_DATA................................32
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12500579 正确答案:D RMAN 的新增功能 对超大型文件应用 Intraf ...
- EF查看sql的方法
using (context = new DataBaseContext()) { #region EF6.0 var listuser =context.dbuser.ToList(); Log.D ...
- (二 )VMware workstation 部署虚拟集群实践——并行批量操作环境部署
在上一篇博客中,已经介绍了安装虚拟集群的过程和需要注意的细节问题. 这篇主要是介绍如何批量登陆远程主机和配置,这个过程中是在没有部署并行处理工具或者集群管理工具的前进行的. ------------首 ...
- cocos2d-x 2.1.4学习笔记01:windows平台搭建cocos2d-x开发环境
cocos2d-x的大致开发流程是,首先使用win32版进行代码编写并完成游戏,然后将代码迁移到对应的开发环境上进行交叉编译完成游戏打包,如iphone上是mac+xcode,android是ecli ...
- phpcms 源码分析七: 模板引擎实现
这次是逆雪寒对模板引擎实现的分析: 1 /* 函数 template函数是在global.func.php 里面定义的. 在前面的phpcms 的首页 index.php 里就见到了. 用法: inc ...
- arcgis10 安装1721错误
arcgis10 安装1721错误,主要是ArcGIS License Manager 服务程序的位置不对,注册表lmgrd.exe中修改lmgrd.ex
- Linux下pcapy的安装问题
在安装pcapy包的时候 cd pcapy-0.10.8/ python setup.py install 报错 error trying to exec ‘cc1plus’: execvp: No ...
- Smokeping 监控部署及配置
安装参见: https://github.com/oetiker/SmokePing/blob/master/doc/smokeping_install.pod 1 Smokeping *** Gen ...
- Scala可变参数列表,命名参数和参数缺省
重复参数 Scala在定义函数时允许指定最后一个参数可以重复(变长参数),从而允许函数调用者使用变长参数列表来调用该函数,Scala中使用“*”来指明该参数为重复参数.例如: scala> de ...