码迷,mamicode.com
首页 > 其他好文 > 详细

1、《UNIX环境高级编程》随记——基础知识

时间:2015-11-13 00:53:44      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:

一、源码编译

1、源码下载

2、本人linux版本 Ubuntu 14.04 (GUN/Linux 3.13.0-0-32-generic x86_64)

3、前提准备

$sudo apt-get install gcc

$sudo apt-get install libbsd-dev

$cd apue.3e

make

..等待编译完成

二、实例随笔

1、作者Makefile

以第一章第一个ls为例(apue.3e/intro/ls1.c)

第一个Makefile(apue.3e/Makefile)

 1 # 要遍历的文件夹
 2 DIRS = lib intro sockets advio daemons datafiles db environ  3     fileio filedir ipc1 ipc2 proc pty relation signals standards  4     stdio termios threadctl threads printer exercises
 5 # for循环,若想要连续遍历用$$i
 6 all:
 7     for i in $(DIRS); do  8         (cd $$i && echo "making $$i" && $(MAKE) ) || exit 1;  9     done
10 
11 clean:
12     for i in $(DIRS); do 13         (cd $$i && echo "cleaning $$i" && $(MAKE) clean) || exit 1; 14     done

第二个Makefile(apue.3e/intro/Makefile)

 1 ROOT=..
 2 # 执行apue.3e/systype.sh
 3 PLATFORM=$(shell $(ROOT)/systype.sh)
 4 # 引入基本量
 5 include $(ROOT)/Make.defines.$(PLATFORM)
 6 # 需要编译的文件
 7 PROGS =    getcputc hello ls1 mycat shell1 shell2 testerror uidgid
 8 
 9 all:    $(PROGS)
10 # 执行gcc命令,相应的量的值在Make.defines.xxx文件中,@表示依赖文件
11 %:    %.c $(LIBAPUE)
12     $(CC) $(CFLAGS) $@.c -o $@ $(LDFLAGS) $(LDLIBS)
13 
14 clean:
15     rm -f $(PROGS) $(TEMPFILES) *.o
16 #引入apue.3e/Make.libapue.inc文件
17 include $(ROOT)/Make.libapue.inc

Make.defines.linux(因为本人的平台是linux)

# Common make definitions, customized for each platform

# Definitions required in all program directories to compile and link
# C programs using gcc.

CC=gcc
COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) -c
LINK.c=$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
LDFLAGS=
LDDIR=-L$(ROOT)/lib
LDLIBS=$(LDDIR) -lapue $(EXTRALIBS)

# -ansi ansi C标准
# -I将后面表示的目录作为第一个寻找头文件的目录,顺序为:(ROOT)/include->/usr/include->/usr/local/include
# -Wall 显示所有警告信息
# -D gcc中进行宏定义
# gcc命令中 -L将后面表示的目录作为第一个寻找库文件的目录,顺序为:(ROOT)/lib->/lib->/usr/lib->/usr/local/lib
CFLAGS=-ansi -I$(ROOT)/include -Wall -DLINUX -D_GNU_SOURCE $(EXTRA)
RANLIB=echo
AR=ar
AWK=awk
LIBAPUE=$(ROOT)/lib/libapue.a

# Common temp files to delete from each directory.
TEMPFILES=core core.* *.o temp.* *.out

2、在自建工作目录中完成代码

把基本代码复制到自己的目录(myapue)

 技术分享

建立第一章代码目录

$mkdir ch1

$cd ch1

再把apue.3e的Makefile复制到ch1中,删除掉PROGS中需要遍历的值,以便添加自己新建的文件

第一个例子:vim myls.c

技术分享

/*注释随笔*/
//DIR:
struct __dirstream
       {
        void *__fd;
        char *__data;
        int __entry_data;
        char *__ptr;
        int __entry_ptr;
        size_t __allocation;
        size_t __size;
        __libc_lock_define (, __lock)
       };
typedef struct __dirstream DIR;
//dirent  <dirent.h>
struct dirent{
    long d_ino;                          /* inode number */
    off_t d_off;                         /* offset to this dirent */
    unsigned short d_reclen;           /* length of this d_name */
    char d_name [NAME_MAX+1];        /* file name (null-terminated) */
}

保存退出后,在吗Makefile的PROGS中添加 myls(PROGS = myls)

$make

./myls /home    可列出/home目录下的文件

<...夜深了...未完待续...>

1、《UNIX环境高级编程》随记——基础知识

标签:

原文地址:http://www.cnblogs.com/emrick/p/4960720.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!