HICK 者,乡巴佬也

入门(Beginning Linux Programming 笔记1)

Posted in: Linux 编程 — Hick @ 2008/11/30 16:07:49 Comments (0)

原文地址: http://www.hickwu.com/?p=255
作者: Hick
转载请注明出处

前面大多数是看过了很多遍的一些 Unix/Linux 渊源和背景。

p38 Linux 应用程序可以分为可执行程序(二进制)和脚本(文本)两种。

p39 linux shell 下输入命令以后,shell 都会在 PATH 环境变量中设置的路径中查找可执行文件。常见路径:

. /bin 用于系统启动的程序
. /usr/bin 非系统的用户可执行程序,一般都是一些标准的 linux 程序
. /usr/local/bin 同样是用户级的可执行程序,一般是系统安装完成以后另外再安装的程序

作为超级用户,一般 PATH 中还包括 /sbin/ /usr/sbin 。

p42 头文件,linux 环境下的 c 文件一般放在 /usr/include/ 下。linux 下常用的 gcc 可有通过 -I 参数增加头文件的路径: gcc -I/usr/openwin/include fred.c 。

p43 标准库文件一般放在 /lib 或者 /usr/lib 。一般库名都是以 lib 开头的。库又分静态库和动态库,分别为 .a 文件和 .so 文件。编译器可以指定库: gcc -o fred fred.c /usr/lib/libm.a 。以一种更简便的方式,可以 libm.a 的路径可以替换为 -lm ,也就是这样的形式: gcc -o fred fred.c -lm 。意味着 -l 后面紧跟的 m 作为库的 id ,编译器会根据这个 id 去相应目录寻找 libm.a 文件。通过 -L 参数还可以增加 lib 的存放路径: gcc -o x11fred -L/usr/openwin/lib x11fred.c -lX11 ,这里加载的库为 libX11.a (或者 .so)。

p44 静态库的制作可以通过 gcc + ar 命令来完成。首先用 gcc 编译 c 代码成目标文件,比如 gcc -c bill.c fred.c 生成 bill.o fred.o 两个文件。

p45 在 program.c 中调用 bill.c 中的 bill 函数,可以这样的传统方式编译: gcc -c program.c ,然后 gcc -o program program.o bill.o 。
下面的命令可以把 bill.o 和 fred.o 编译成静态库文件: ar crv libfoo.a bill.o fred.o ,然后这样来调用库文件: gcc -o program program.o libfoo.a 。 有些系统需要维护一个库文件表,创建库以后需要用这个命令来告诉系统增加了一个库文件: ranlib libfoo.a ,linux 下这不是必须的。

p46 按照前面的方式,我们可以通过 -L 指定库路径, -l 指定库名,所以也可以用这个命令编译 program.c : gcc –o program program.o –L. –lfoo 。静态库把库文件编译到了可执行程序,不方便升级库文件;如果多个程序使用了同一个静态库,同时调用的时候他们也会占用多不同的内存空间,所以有了动态库 .so 文件,也可以称为共享库。

p47 一般动态库文件 /lib/libm.so 只是实际库文件 /lib/libm.so.N 的一个 link ,其中 N 表示库文件的主版本号。经常会允许多个主版本的动态库文件同事存在,调用动态库的应用程序可以自行选择需要使用的版本。在 suse 下,一般有一个 ld.so 管理动态库,实际名字可能是 ld-linux.so.2 或 ld-lsb.so.2 或 ld-lsb.so.3 。动态库的配置比如寻找动态库的路径配置在 /etc/ld.so.conf 中,如果有修改,可以通过 ldconfig 来使修改生效。

可以通过 ldd 命令查看一个程序比如 program 所依赖的动态库: ldd program 。

linux 下查看一个命令的使用手册,一般可以用 man ,很多 GNU 软件还可以通过 info 命令获得帮助信息。

Beginning Linux Programming 4th Edition 笔记

Posted in: Linux 编程 — Hick @ 2008/11/30 16:04:35 Comments (0)

一开始是搬起 APUE (Advanced Programming of Unix Enviroment) 就啃,尽管是中文版,发现还是基础知识薄弱,C 语言和 linux 系统知识都还欠缺,高估了自己了,这 Advanced 还真不是盖的 :)

Beginning Linux Programming(第四版) 作为 linux 编程入门确实还不错—尽管是全英文版。整的来说,以读写 CD 为例子贯穿全书的手法不错,不过对 CD 读写实在提不起兴趣来,个人感觉如果作者一写一个 server/web server 作为导向,涉及的面应该比较广,也更容易提起读者兴趣来。

看第一遍的笔记全在 pdf 文件上了,而且看都比较粗略,不少章节包括 Shell 编程、线程、终端屏幕输出控制、MySQL 、GTK+ 开发 GNOME、Qt 开发 KDE 等部分都没怎么看。第二遍一方面是整理下陆续以来的学习所得,一方面也更深入的看前面忽略的章节。

入门

http://www.hickwu.com/?p=255

Shell 编程

http://www.hickwu.com/?p=259

http://www.hickwu.com/?p=260

文件操作

http://www.hickwu.com/?p=261

http://www.hickwu.com/?p=262

http://www.hickwu.com/?p=263

Linux 环境

终端

基于文本和光标的屏幕管理

数据管理

MySQL

开发工具

调试

进程和信号

POSIX 线程

进程间通信:管道

信号量、共享内存和消息队列

Socket

GTK+ 开发 GNOME

Qt 开发 KDE

Linux 标准

Muse - Emacs 纯粹主义者日常文档工具

Posted in: Emacs&Elisp — Hick @ 2008/11/29 22:30:45 Comments (0)

看了两天 Emacs Muse ,感觉 Muse 跟 Emacs 结合紧密;用于写文档的话,跟我一直用的 Asciidoc 相比,各有所长。对我来说,更合适的道路是学习下 elisp ,把 Muse 文档在 Emacs 上的一些优秀表现应用到 Asciidoc 的 emacs mode: doc-mode 中去。 Muse 语法比 AsciiDoc 还要简单,简单到有些遗憾,不支持 NOTE 等。在 Emacs 上的表现能力(以可视化效果显示特殊标记、链接回车访问等)占优,另外能够让多个文档结合更紧密。转换格式差不多,只不过一个用 python 一个用 elisp 。但是对我来说,熟悉 Python 比 elisp 更有价值,asciidoc 比 muse 更具备可改造的空间。这几天的学习文档整理如下:

(more…)

windows 下 Emacs 最新版下载

Posted in: Emacs&Elisp — Hick @ 2008/11/27 21:14:39 Comments (2)

以前一直在 windows 下用 NTEmacs 22, http://ntemacs.sourceforge.net ,有一年多不见更新了。找了个最近更新比较勤快,版本也切换到 Emacs 23:

http://www.ourcomments.org/cgi-bin/emacsw32-dl-latest.pl

(081217 补记)这几天看到 brep@水木社区也发了个编译最新 windows 版 Emacs 23 ,放在 Google Code: http://code.google.com/p/emacs-for-windows/

另外,cybergene@水木社区编译了一个比较新的 Emacs23 版,据说还支持 xpm/jpg/png/gif 等图片的显示。介绍参见 http://www.newsmth.net/bbscon.php?bid=573&id=70514&ftype=1&num=541

下载地址1:
http://www.fileqube.com/shared/TmjcTkc104198

下载地址2:
http://www.filefactory.com/file/e65f75/n/emacs-cvs-20080916-win32-bin_7z

顺便记下修改 .emacs 文件以后不需要重启的方法: M-x M-x eval-buffer

gnuplot

Posted in: Linux/Unix工具 — Hick @ 2008/11/24 21:46:38 Comments (0)

gnuplot 能够按照指定的数据生成二维图或三维图,提供丰富的可选图表样式。当然对复杂的三维图,建议使用专业 3D 绘图软件。这是一款非一般意义上的开源的”公开源代码”的免费软件—copyright reserved。有 windows 版,官方网站 http://www.gnuplot.info 。生成的图片参见上文 利用 vmstat+gnuplot+python脚本生成CPU和内存使用率图表

安装好以后运行 gnuplot 即可进入交互模式。然后用下面的简单命令可以在当前目录创建一个 sin(x) 的图表文件 sin.gif(注意:下面的输出代码中的某些英文引号可能被替换成了中文引号):

set terminal gif
set output 'sin.gif'
plot sin(x)

再次换一张图片需要先 reset ,下面从 tsv 文件中获取信息生成图表:

reset
set terminal gif
set output 'hick.gif’
set xdata time # The x axis data is time
set timefmt “%d-%b-%y” # The dates in the file look like 10-Jun-04
set format x “%b %d” # On the x-axis, we want tics like Jun 10
plot [”31-May-04″:”11-Jun-04″] ‘hick.dat’ using 1:2 with linespoints

hick.dat 文件如下:

#Date Open High Low Close
1-Jun-04 88.00 88.48 87.30 88.12
2-Jun-04 88.64 88.64 87.89 87.98
3-Jun-04 87.85 88.10 87.35 87.35
4-Jun-04 87.95 88.49 87.50 87.56
7-Jun-04 88.75 88.99 88.01 88.64
8-Jun-04 88.64 90.50 88.40 90.04
9-Jun-04 89.90 90.55 89.81 90.09
10-Jun-04 90.23 90.75 89.89 90.46

plot 可以通过逗号分割的定义,生成对比曲线:

reset
set terminal gif
set output 'hick.gif'
plot "hick.dat" using 1:2 with lines title "open", \
"hick.dat" using 1:3 with lines title "high", \
"hick.dat" using 1:4 with lines title "low", \
"hick.dat" using 1:5 with lines title "close"

每次在交互模式下输入这么多命令比较麻烦,可以把上述”脚本”保存到 hick.p 文件,下次需要使用的时候,进入 gnuplot 以后,再 load “hick.p” 即可生成图表图片了。下面的例子增加了若干可选参数的设置:

# xy 轴的说明
set xlabel "Date"
set ylabel "Stock Value"
# 输出图片类型: png/gif/jpeg 等
set terminal png
# 输出图片名
set output 'hick.png'
# 输出图片大小为默认值的:宽 * 1.2, 高 * 0.5
set size 1.2, 0.5
# 设置网格
set grid
# 图例说明的位置: top/bottom left/right outside
set key top left
# 设置 x 轴为时间格式
set xdata time
# 输入的时间格式(%d-%d-%y 表示输入时间类似 1-Jun-04 这样的)
set timefmt "%d-%b-%y"
# 输出的时间格式(%m 为月份的数字表示)
set format x "%m/%d"
# 渲染图片
plot "hick.dat" using 1:2 with linespoints title "open", \
"hick.dat" using 1:3 with linespoints title "high", \
"hick.dat" using 1:4 with linespoints title "low", \
"hick.dat" using 1:5 with linespoints title "close"

而更简单的一种方式,为上面的”脚本”指定解释器路径,即可作为一般的 shell 脚本来运行。

gnuplot 允许数据文件是 tab 和空格分割的文本数据,以 # 号开头的行将会被忽略。

下面是 gnuplot 的几个功能说明,更多具体的信息参考官方文档 http://www.gnuplot.info/documentation.html

. 4.0 版支持数据文件和脚本文件合在一起写
. 4.3 版才支持 utf8 编码
. set datafile 可以设置数据文件的格式,比如指定分割符、注释
. 支持对数据进行函数运算,除了常用的数学函数,还可以自己定义函数
. gnuplot 有 windows 版,不通过 cygwin 也可以在 windows 下运行

Next Page »