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相关的函数如下: 比较两个 ...
随机推荐
- oc学习之路----通过代码自定义cell
需求背景:由于tableView中每一个cell的数据与布局都不一样,故不能用xib实现功能,这是用代码写自定义cell就有必要了. 步骤 1.新建一个继承自UITableViewCell的类 2.重 ...
- cocos2d-x编程的一些小技巧
转自:http://blog.sina.com.cn/s/blog_61d2d3f50100zgz8.html 一. CC_ASSERT 或 CCAssert宏 Assert - 断言 使用断言可 ...
- mysql delete from
delete a from #ta a where exists (select 1 from #tb b where a.id=b.id)
- 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload
有时候.在JavaScript中.即使设置了ID也有可能出现document.getElementById()获取不到的情况,然后你就開始想document是否写错之类的.事实上根本就不是你的代码的大 ...
- SecureCRT学习之道:SecureCRT经常使用快捷键设置与字体设置方法
1:假设不想每次登陆都输入password,能够在你打开的session里邮件session option->login action 选中automate logon 双击ogin 和assw ...
- Spring mvc Data Redis—Pub/Sub(附Web项目源码)
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...
- 关于WinRT中c++和c#相互调用的问题
先说结论(不见得是最终正确的结论,不过google了一晚上也没有查出个所以然来,即便有解决方法我也认为是微软傻x): 首先c#和c++理所应当的不应该在同一个工程中,而只能是同一个工程的两个项目.只能 ...
- [GIF] Colors in GIF Loop Coder
In this lesson we cover the different methods for defining and animating colors in GIF Loop Coder. f ...
- Double 类型运算时的精度问题
double 类型运算时的 计算的精度不高,常常会出现0.999999999999999这种情况,那么就须要用BigDecimal 它是java提供的用来高精度计算的工具类 以下是对这个类的一个包 ...
- Java bit、byte、位、字节、汉字、字符
package com.suypower.chengyu.test; public class ByteTest { /** * byte 8 bits -128 - + 127 * 1 bit = ...