《Linux应用程序开发(第二版)》读书笔记_aQuei's blog_百度空间
    《Linux应用程序开发(第二版)》武延军 郭松柳 译
<Linux Application Development> write by Michael K.Johnson & Erik W.Troan

1.推荐书籍
<The C programming Language>
<Practical C programming>
<Programming with GNU Software>
<Advanced Programming in the UNIX Environment>
<UNIX Network Programming>
<A Practical Guide to Red Hat Linux 8>
<Linux in a Nutshell>
2.http://ladweb.net
【{dy}章 Linux的发展历史】
Linux是一个易于移植的平台,也是一个构建和运行应用程序的平台
【第二章 许可证和版权】
{zh0}书写Copyright整个单词
example:
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc
许可证
GPL License
LGPL License
MIT/X/BSD License
Artistic License

【第三章 在线系统文档】
man手册页
man apropos whatis[*]
info手册页
info pinfo
e.g.
pinfo function
其他文档
/usr/share/doc 其他未分类文档的存放目录
第四章 开发工具
emacs,vi,make,gdb,strace
automake autoconf libtool
make
####Makefile#############################
#Name:        Makefile
#Descr:        xxx project make file
#Usage:   
$>make all
$>make clean
#Author:    zuohaitao
#Date:        yyyy-mm-dd

CC=gcc
CFLAG=-wall -O
LDFLAG=-L.
LFLAG= -lpthrad
INCDFLAG=-I
AR=ar
ARFLAG=rcs
BIN=a.out
.PHONY all clean
all:$(BIN)

%.o:%.c
$(CC) $(CFLAG) $(LDFLAG) $(INCDFLAG) -c $^ -o $@
a.out:a.o public.o
$(CC) $(CFLAG) $(LDFLAG) $(INCDFLAG) $^ -o $@
clean:
rm *.o
rm $(BIN)

#################################
gcc -MM
输出make规则
FORCE替代.PHONY的方式
clean:FORCE
rm *.o
rm $(BIN)

make -k
/bin/false /bin/true
\连接两行命令
后缀规则
.c.o:
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
.SUFFIXES: .c .o
gdb
gcc -ggdb -c somefile.c -o someexec.out
gdb someexec.out
(gdb)...

1.断点
info break|watch
break|delete|clear
enable|disable
(gdb)b 设置断点 b linenumber
(gdb)n 逐过程
(gdb)s 逐句
(gdb)clear xx断点

2.执行
run|attach
finish|continue|until|return
next|nexti|setup|setupi
(gdb)r 运行

3.查看
print|x|
print 打印表达式的值
info reg
disass
list
backtrace
(gdb)l number 显示第number行
(gdb)backtrace 打印堆栈

4.其他
set|shell
(gdb)set 改变变量值

第五章 gcc的选项和扩展
-o filename 输出文件名
-c 只编译不链接
-g 加入调试信息
-DMACRO=x 定义宏MACRO
-static 静态链接库
-Ldir 库文件所在目录
-lname 链接名为libname.a的库文件
-Idir 头文件所在目录
-Wall 打开编译器所有有用的警告
第六章 GNU的C语言库
$sysconf_t.c打印所有系统相关信息
第七章 内存调试工具
mcheck
mtrace
~$ MALLOC_TRACE=m.log gdb ./m
(gdb) break main
(gdb) command 1
>call mtrace()
>continue
>end
(gdb) r

mpr
libefence
valgrind

第八章 创建和使用库
1 产生obj文件
2 ar rcs libhlello.o libhello.a
3 gcc usehello.c -Ldir -lhello 其中 -Ldir=L../dir/ libhello.a使用lhello
第九章 Linux系统环境
一、perror()
perror("open");
二、strerror
char* err = strdup(strerror(errno));
//...
free(err);
三、通用错误返回代码
四、查找头文件和库文件
/usr/include
/usr/lib
第十章 进程模型
一、内核跟踪的进程信息
1、程序上下文(运行的当前位置)
2、正在访问的文件
3、信用状(哪个用户、组)
4、当前目录
二、进程的属性
1、pid_t 父进程id ppid 进程标识符pid
2、信用状
A、用户ID和组ID保存在 /etc/passwd /etc/group
B、uid_t
真实用户标识符(real uid)―― 运行进程的用户ID
已保存用户标识符(saved uid)―― 内核维护 没有接口进行得到或者改变
有效用户标识符(effective uid)―― 用于安全检查 可以是运行进程的用户ID 或者是文件拥有者的ID(通过设置文件标志位指定)
C、补充组(supplement group)
D、相关函数
uid_t ruid = geuid()    //得到真实用户ID
uid_t euid = geteid()    //得到有效用户ID
setreid(uid_t ruid, uid_t euid)    //设置真实和有效用户ID
三、进程信息
1、参数
int argc=命令行参数数目
argv[0]{dy}项=程序名
argv[argc-1]{zh1}一项 argv[argc]=NULL
2、环境变量
保存在extern char* environ[];
const char* getenv(const char* name)
int putenv(const char* string)    //string = "NAME=VALUE"
四、创建进程 pid_t pid = fork(void) 子进程中返回0
五、等待子进程结束
pid_t wait4(pid_t pid, int* status, int options, struct rusage* rusage);
wait()
waitpid()
wait3()
六、运行新进程
execv(const char* path, const char** argv)
...
七、进程终止
1、自我终止
exit(int exitCode)
_exit(int exitCode)
ateexit(void (*function)(void))
2、其他进程终止
int kill(pid_t pid, int signum)
signum = SIGTERM    //体面的杀死
signum = SIGKILL    //立即终止
八、简单子进程
system(const char* cmd)
九、从进程读或写
FILE* popen(const char* cmd, const char* mode)
pclose(FILE* stream)
十、会话 进程组
第十一章 简单的文件管理
第十二章 信号处理
1、信号表
2、不可靠信号
typedef SIGHANDLER void (*handler(int sig_num));
int signal(int sig_num, SIGNANDLER handler);
3、可靠信号
struct
{
sa
sa_mask;
handler;
};
signaction(int sig_num, struct* iact, struct* oact);
第十三章 高级文件操作
多路输入\输出
select()
poll()
epoll()
文件锁
最简单的文件锁
open(fd, RDONLY, 0644)
open(fd, OEXECL|RDWR)
建议锁
fcntl(fd,
强制锁
第十四章 目录操作
chdir()
getcwd()
chroot()
opendir()、readdir()、closedir()
glob()
ftw()、nftw()

第十五章 作业操作
第十六章 终端与伪终端
第十七章 socket网络编程
1.socket() connect() send() recv() close()
2.socket() bind() listen() while(1){accept() send() recv()} close()
3.unix域套接字
3.1.IPC通讯
3.2.类似于管道的IPC通讯
3.3.传递文件描述符
4.UDP
5.地址转换
第十八章 时间
第十九章 随机数
/gcode/src/win32/rand_matrix.c
第二十章 虚拟控制台编程
printf("\033[31mHello color world!\n\033[0m");
颜色:

1. #define NONE         "\033[m"
2. #define RED          "\033[0;32;31m"
3. #define LIGHT_RED    "\033[1;31m"
4. #define GREEN        "\033[0;32;32m"
5. #define LIGHT_GREEN  "\033[1;32m"
6. #define BLUE         "\033[0;32;34m"
7. #define LIGHT_BLUE   "\033[1;34m"
8. #define DARY_GRAY    "\033[1;30m"
9. #define CYAN         "\033[0;36m"
10. #define LIGHT_CYAN   "\033[1;36m"
11. #define PURPLE       "\033[0;35m"
12. #define LIGHT_PURPLE "\033[1;35m"
13. #define BROWN        "\033[0;33m"
14. #define YELLOW       "\033[1;33m"
15. #define LIGHT_GRAY   "\033[0;37m"
16. #define WHITE        "\033[1;37m"

颜色分为背景色和字体色,30~39用来设置字体色,40~49设置背景:
背景色                        字体色
40: 黑                          30: 黑
41: 红                          31: 红
42: 绿                          32: 绿
43: 黄                          33: 黄
44: 蓝                          34: 蓝
45: 紫                          35: 紫
46: 深绿                      36: 深绿
47: 白色                      37: 白色

记得在打印完之后,把颜色恢复成NONE,不然再后面的打印都会跟着变色。

另外,还可以加一些ANSI控制码。加颜色只是以下控制码中的一种:

\033[0m   关闭所有属性 
\033[1m   设置高亮度 
\033[4m   下划线 
\033[5m   闪烁 
\033[7m   反显 
\033[8m   消隐 
\033[30m   --   \033[37m   设置前景色 
\033[40m   --   \033[47m   设置背景色 
\033[nA   光标上移n行 
\033[nB   光标下移n行 
\033[nC   光标右移n行 
\033[nD   光标左移n行 
\033[y;xH设置光标位置 
\033[2J   清屏 
\033[K   xx从光标到行尾的内容 
\033[s   保存光标位置 
\033[u   恢复光标位置 
\033[?25l   隐藏光标 
\033[?25h   显示光标

第二十一章 Linux控制台
第二十二章 编写安全程序

第二十三章 字符串匹配
glob()
fnmatch()
regcomp()、regexec()、regfree()、regerror()
第二十四章 用S-Lang来处理终端
http://www.s-lang.org/download.html
第二十五章 基于散列的数据库函数库
http://qdbm.sourceforge.net/
第二十六章 解析命令行选项
1. getopt() getopt_long() man getopt
2. popt library man popt
第二十七章 运行时动态加载
dlopen()
dlsym()
dlerror()
dlclose()
第二十八章 用户识别和认证
1.
getpwuid()
getpwnam()
getgrgid()
gergrnam()
2.PAM
http://www.kernel.org/pub/linux/libs/pam/
====================================
vim:filetype=changelog


郑重声明:资讯 【《Linux应用程序开发(第二版)》读书笔记_aQuei's blog_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——