【前言】
读本书的学习目标:
1. 掌握标准linux C语言函数库和个中linux或unix标准指定的其他工具的使用方法
2. 掌握如何使用大多数标准linux开发工具
3. 学会通过DBM和MySQL数据库系统存储Linux中的数据
4. 理解如何为X视窗系统建立图形用户界面,同时使用GTK和Qt函数库
5. 拥有开发自己的实际应用程序的信心和能力
一个贯穿全书的大型示例项目:
一个简单的用于记录音乐CD详细资料的数据库应用程序。
文件操作、从linux环境中获取信息、处理终端的输入输出、curses函数库
GTK+工具包:是GNOME开发环境的基础;
Qt工具包:是KDE开发环境的基础。
本书所有源代码下载地址:
http://www.wrox.com/WileyCDA/WroxTitle/Beginning-Linux-Programming-4th-Edition.productCd-0470147628,descCd-DOWNLOAD.html
【第一章:入门】
Linux:GNU/Linux
GNU项目自由软件官网: http://www.gnu.org
linux实际是一个内核,在内核上安装许多自由发布的软件,从而完成一个linux系统。
linux程序设计,就是C语言编程。
linux程序包含两种特殊类型的文件:可执行文件、脚本文件。
系统级的应用程序,可以放在目录:/usr/local/ 目录中来运行和访问所需的文件。
对于开发用和个人的应用程序,最好在家目录中使用一个文件夹来存放它。
系统提供的头文件都位于:/usr/include/ 目录下。
$:' grep EXIT_ /usr/include/*.h
//在/usr/include/目录下所有以.h结尾的文件中搜索字符串EXIT_
库,是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。
标准系统库文件存放于:/lib/ 或 /usr/lib/ 下。
静态库:一组处于“准备好使用”状态的目标文件。必须使用 -l 选项指明除标准C语言运行库以外还需要使用的库。
静态库,也称作归档文件,文件名都以 .a 结尾。
静态库制作:
$:' gcc -c *.c
// 创建目标模块.o文件
$:' ar -crv *.o libfoo.a
// 创建foo静态库文件libfoo.a
$:' ranlib libfoo.a
// linux下ranlib不是必须操作,做了也无妨。(是为衍生的unix系统生成内容表)
$:' gcc -o program program.o -L. -lfoo
// -L选项告诉编译器库文件的位置;-l选项告诉编译器是哪个静态库
共享库即动态库,程序本身不包含函数代码,引用运行时才访问共享代码的库文件。
$:' ldd program
// ldd命令查看程序锁需要的共享库文件
man命令,用来访问在线手册页。
$:' man gcc
// space空格键读下一页,enter回车键读下一行,q键退出。
// f键下一屏,b键上一屏。
info命令,在GNU软件和其他一些自由软件中的在线文档系统。通过链接和交叉引用来浏览文档并可以直接跳转相关的章节。
$:' info gcc
// Ctrl+H可以看到info的操作指南
【第二章:shell程序设计】
shell执行shell程序,这些程序通常称为 脚本 ,运行时是解释执行的。
$:' ls -al | more
// ls和more命令,通过管道实现了文件列表的分屏显示。
$:' man bash | col -b | lpr
// bash信息进行显示和打印
重定向输出:
$:' ls -l > lsoutput.txt
// 把ls命令的输出结果保存到文件lsoutput.txt中
$:' ps >> lsoutput.txt
// 把ps命令的输出结果附加到文件lsoutput.txt中
$:' kill -l 1234 >killouterr.txt 2>&1
// 将标准输出重定向到文件killouterr.txt中,然后讲标准错误输出重定向到与标准输出相同的地方
重定向输入:
$:' more < killouterr.txt
// linux下重定向输入的话意义不大
管道:
$:' ps -xo comm | sort | uniq | grep -v sh | more
// 首先按字母顺序排序ps命令的输出,再用uniq命令去除名字相同的进程,然后用grep -v sh命令删除名为sh的进程,最终将结果分页显示在屏幕上
shell的语法:
变量:=赋值,两边不能有空格
// 使用read命令将用户输入的值赋值给一个变量
环境变量: $HOME $PATH $PS1 $PS2 $IFS $0 $# $$
参数变量: $1,$2,... $* $@
条件:test 或 [ ]
控制结构:
if语句
if [ condition ]
then
statements
else
statements
fi
elif语句(else if)
echo -e 可以实现每一行后面的换行符。
for语句
for variable in values
do
statesments
done
while语句
while condition do
statesments
done
读本书的学习目标:
1. 掌握标准linux C语言函数库和个中linux或unix标准指定的其他工具的使用方法
2. 掌握如何使用大多数标准linux开发工具
3. 学会通过DBM和MySQL数据库系统存储Linux中的数据
4. 理解如何为X视窗系统建立图形用户界面,同时使用GTK和Qt函数库
5. 拥有开发自己的实际应用程序的信心和能力
一个贯穿全书的大型示例项目:
一个简单的用于记录音乐CD详细资料的数据库应用程序。
文件操作、从linux环境中获取信息、处理终端的输入输出、curses函数库
GTK+工具包:是GNOME开发环境的基础;
Qt工具包:是KDE开发环境的基础。
本书所有源代码下载地址:
http://www.wrox.com/WileyCDA/WroxTitle/Beginning-Linux-Programming-4th-Edition.productCd-0470147628,descCd-DOWNLOAD.html
【第一章:入门】
Linux:GNU/Linux
GNU项目自由软件官网: http://www.gnu.org
linux实际是一个内核,在内核上安装许多自由发布的软件,从而完成一个linux系统。
linux程序设计,就是C语言编程。
linux程序包含两种特殊类型的文件:可执行文件、脚本文件。
系统级的应用程序,可以放在目录:/usr/local/ 目录中来运行和访问所需的文件。
对于开发用和个人的应用程序,最好在家目录中使用一个文件夹来存放它。
系统提供的头文件都位于:/usr/include/ 目录下。
$:' grep EXIT_ /usr/include/*.h
//在/usr/include/目录下所有以.h结尾的文件中搜索字符串EXIT_
库,是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。
标准系统库文件存放于:/lib/ 或 /usr/lib/ 下。
静态库:一组处于“准备好使用”状态的目标文件。必须使用 -l 选项指明除标准C语言运行库以外还需要使用的库。
静态库,也称作归档文件,文件名都以 .a 结尾。
静态库制作:
$:' gcc -c *.c
// 创建目标模块.o文件
$:' ar -crv *.o libfoo.a
// 创建foo静态库文件libfoo.a
$:' ranlib libfoo.a
// linux下ranlib不是必须操作,做了也无妨。(是为衍生的unix系统生成内容表)
$:' gcc -o program program.o -L. -lfoo
// -L选项告诉编译器库文件的位置;-l选项告诉编译器是哪个静态库
共享库即动态库,程序本身不包含函数代码,引用运行时才访问共享代码的库文件。
$:' ldd program
// ldd命令查看程序锁需要的共享库文件
man命令,用来访问在线手册页。
$:' man gcc
// space空格键读下一页,enter回车键读下一行,q键退出。
// f键下一屏,b键上一屏。
info命令,在GNU软件和其他一些自由软件中的在线文档系统。通过链接和交叉引用来浏览文档并可以直接跳转相关的章节。
$:' info gcc
// Ctrl+H可以看到info的操作指南
【第二章:shell程序设计】
shell执行shell程序,这些程序通常称为 脚本 ,运行时是解释执行的。
$:' ls -al | more
// ls和more命令,通过管道实现了文件列表的分屏显示。
$:' man bash | col -b | lpr
// bash信息进行显示和打印
重定向输出:
$:' ls -l > lsoutput.txt
// 把ls命令的输出结果保存到文件lsoutput.txt中
$:' ps >> lsoutput.txt
// 把ps命令的输出结果附加到文件lsoutput.txt中
$:' kill -l 1234 >killouterr.txt 2>&1
// 将标准输出重定向到文件killouterr.txt中,然后讲标准错误输出重定向到与标准输出相同的地方
重定向输入:
$:' more < killouterr.txt
// linux下重定向输入的话意义不大
管道:
$:' ps -xo comm | sort | uniq | grep -v sh | more
// 首先按字母顺序排序ps命令的输出,再用uniq命令去除名字相同的进程,然后用grep -v sh命令删除名为sh的进程,最终将结果分页显示在屏幕上
shell的语法:
变量:=赋值,两边不能有空格
// 使用read命令将用户输入的值赋值给一个变量
环境变量: $HOME $PATH $PS1 $PS2 $IFS $0 $# $$
参数变量: $1,$2,... $* $@
条件:test 或 [ ]
控制结构:
if语句
if [ condition ]
then
statements
else
statements
fi
elif语句(else if)
/* if脚本例子 */
#!/bin/sh
echo "Is it morning? Please answer yes or no"
read timeofday
if [ $timeofday = "yes" ]; then
echo "Good morning"
else
echo "Good afternoon"
fi
exit 0
/* ----------- */
echo -e 可以实现每一行后面的换行符。
for语句
for variable in values
do
statesments
done
/* for脚本例子 */
#!/bin/sh
for file in $(ls *); do
echo $file
done
exit 0
/* ----------- */
while语句
while condition do
statesments
done
/* while脚本例子 */
#!/bin/sh
echo "Enter passwd"
read trythis
while [ "$trythis" != "secret" ]; do
echo "Sorry, try again..."
read trythis
done
echo "success..."
exit 0
/* ----------- */