unix环境高级编程和网络编程源代码能在mac下编译通过吗
听说mac os基于unix,想买个mac pro学习unix下的编程,不知道能不能编译这两本书上的源代码还有能练习unix的shell程序设计吗 可以过,但有些小修改,动手尝试下。 BTW, 买MacBook Pro可以学UNIX编程,学习娱乐两不误,但用Mac Pro有些杀鸡用牛刀的感觉。。。OS X自从10.5 Leopard就是获得认证的UNIX系统,遵循Single UNIX Specification,规范文档写的不错,可以当参考手册看。 当然没问题,不过首先要在你的MAC系统安装XCODE然后在扩展插件里安装GCC,目前版本已经淘汰了gcc编译器采用了更好的编译器。 我表示怀疑, 作者写这书的时候,Mac还没出世。 如果我猜的没错,楼上朋友所指的Unix编程图书应该是W.Richard Stevens写的UNIX环境编程,这本书最初创作于1996-1999年间,作者网站(http://www.kohala.com/start/),与此同时苹果操作系统Mac OS 9已经发布,在苹果硬件方面已发布了Power Macintosh G4,而此时的苹果掌门人由乔布斯再次接管。 本帖最后由 fly3ds 于 2013-10-12 14:20 编辑cgweb 发表于 2013-10-08 20:26 static/image/common/back.gif
如果我猜的没错,楼上朋友所指的Unix编程图书应该是W.Richard Stevens写的UNIX环境编程,这本书最初创作于1 ...
好吧,就算你说的对。但是这书里的程序能否在Mac OS上跑起来还是未知的,没听说过有谁把这书里的程序搞到Mac上去运行起来。
我估计,最起码,要做相当的修改才能跑起来那么一两个程序;可能改个几个程序之后,就没耐心了,一大堆系统调用、库函数、配置文件,鬼知道到底干什么用的,在Mac上有没有实现,或者有没有类似的实现。
各个Unix系统之间的差异其实还是挺大的。 你说的也对:D UNIX的具体实现差异大,但标准接口早就稳定很多年了,尤其是认证UNIX(如HP UX, IBM AIX, Oracle Solaris, Mac OS X 10.5+),必须实现POSIX.1-2001/SUS v3,而APUE的核心内容都在上述标准范围内。
APUE(UNIX环境高级编程)都有三个版本了,从官网下载2005年的第二版,书中覆盖了FreeBSD 5.2.1/Linux 2.4.22/Solaris 9/Mac OS X 10.3,比较古老了。下面我在2013年发布Mac OS X 10.9(gcc 4.2.1基于LLVM 3.3)上编译所有代码
1. 目录树顶层部分内容。bash-3.2 $ll | head -20
total 1728
drwxr-xr-x248 Guoruistaff84321 24 16:59 ./
drwx------+11 Guoruistaff 3741 24 16:37 ../
-r--r--r-- 1 Guoruistaff 6565 292005 DISCLAIMER
-rw-r--r-- 1 Guoruistaff 5525 292005 Make.defines.freebsd
-rw-r--r-- 1 Guoruistaff 5685 292005 Make.defines.linux
-rw-r--r-- 1 Guoruistaff 5551 24 16:59 Make.defines.macos
-rw-r--r-- 1 Guoruistaff 5505 292005 Make.defines.solaris
-rw-r--r-- 1 Guoruistaff 6785 292005 Makefile
-rw-r--r-- 1 Guoruistaff15115 302005 README
drwxr-xr-x 11 Guoruistaff 3745 282005 advio/
drwxr-xr-x 14 Guoruistaff 4765 292005 call/
drwxr-xr-x 24 Guoruistaff 8165 292005 calld/
drwxr-xr-x 11 Guoruistaff 3745 282005 daemons/
drwxr-xr-x 7 Guoruistaff 2385 282005 datafiles/
drwxr-xr-x 9 Guoruistaff 3065 282005 db/
drwxr-xr-x 13 Guoruistaff 4425 282005 environ/
drwxr-xr-x 17 Guoruistaff 5785 282005 exercises/
lrwxr-xr-x 1 Guoruistaff 135 282005 fig1.10@ -> proc/shell2.c
lrwxr-xr-x 1 Guoruistaff 105 282005 fig1.3@ -> file/ls1.c2. 编译过程。
1)首先读下README,然后进入 Make.defines.macos中修改当前源码所在目录,完毕。
2)输入“make macos”开始编译,警告很多,直到出现一个未定义符号的链接错误终止编译了:gcc -ansi -I/Users/Guorui/Downloads/apue.2e/include -Wall -DMACOS -DDEBUG -o call main.o call.o put.o take.o takeput.o escape.o loop.poll.o ../sockets/clconn.o../lib/libapue.a
clang: warning: argument unused during compilation: '-ansi'
Undefined symbols for architecture x86_64:
"_CMSG_LEN", referenced from:
_recv_fd in libapue.a(recvfd.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** Error 1
make: *** Error 13) 寻找和解决编译错误。发现宏'CMSG_LEN'未定义,因为OS X在x86-64架构下的兼容标准已经变为严格符合SUSv3了,
默认去掉了一些传统UNIX的扩展函数。不妨再加入那些扩展函数,于是在Make.defines.macos加入'-D_DARWIN_C_SOURCE'。
再次编译,依然很多警告,无视,幸好全部成功。
4) 随便找了一个例子运行,用系统调用生成空洞文件。bash-3.2 $l
access* changemod.cfileflags.cftw4.c linux.mk macos.mk solaris.mk umask* zap.c
access.c devrdev* filetype* hello* longpath* mycd* testerror* umask.c
cdpwd* devrdev.c filetype.c hello.c longpath.c mycd.c testerror.cunlink*
cdpwd.c file.hole freebsd.mk hole* ls1* seek* uidgid* unlink.c
changemod* fileflags* ftw4* hole.c ls1.c seek.c uidgid.c zap*
bash-3.2 $./hole
bash-3.2 $ll file.hole
-rw-r--r--1 Guoruistaff163941 24 18:11 file.hole5. 总体来看只新增了一个宏就完成全部编译,没任何代码修改,没什么难度。至于研究具体的调用行为,则是看这本书的目的了,
而且SUSv3中的标准工具和接口行为正确性,OpenGroup认证UNIX时已经测试了,无需我们担心。
楼上很牛逼
页:
[1]
2