lerosua’s blog


svn 指令速记

Posted in 程序设计 由 lerosua on the 十二月 10, 2006

此篇用于帮助记忆指令,SVN的学习来源于svnbook的中文版。已经学会基本应用。
SVN真是个好东西啊!

创建SVN的版本库中心。

svnadmin  create   /path/to/SVN

将你的项目加入svn数据库中。

svn import   /tmp/project   file:///path/to/SVN  -m  “inital import “

在某个地方导出你的项目。

svn checkout  file:///path/to/SVN  project

更新你的项目文件。

svn update

查看项目当前状态。

svn status

查看你做的更改。

svn diff

svn commit      -m “message”                  提交你的改变到版本库中,后面参数为此次发动的注释.
svn  list                                   列出版本库中当前目录下的文件
svn delete file                    在本地中删除file文件。svn commit 提交更新才会在版本库实际删除file文件。
svn  add      file                  增加file文件。同样只有在svn commit 提交后才会在版本库中实际增加。
svn move file file2           将file文件更名为file2  .
svn revert                              去除更改。后面可接操作过的文件。

svn log                                    svn 日志。

svn各种状态关键字意义:

L    abc.c               # svn已经在.svn目录锁定了abc.c
M      bar.c               # bar.c的内容已经在本地修改过了
M     baz.c               # baz.c属性有修改,但没有内容修改
X      3rd_party           # 这个目录是外部定义的一部分
?      foo.o               # svn并没有管理foo.o
!      some_dir            # svn管理这个,但它可能丢失或者不完整
~      qux                 # 作为file/dir/link进行了版本控制,但类型已经改变
I      .screenrc           # svn不管理这个,配置确定要忽略它
A  +   moved_dir           # 包含历史的添加,历史记录了它的来历
M  +   moved_dir/README    # 包含历史的添加,并有了本地修改
D      stuff/fish.c        # 这个文件预定要删除
A      stuff/loot/bloo.h   # 这个文件预定要添加
C      stuff/loot/lump.c   # 这个文件在更新时发生冲突
R      xyz.c               # 这个文件预定要被替换
S  stuff/squawk        # 这个文件已经跳转到了分支

Unix编程FAQ v0.10

Posted in 程序设计 由 lerosua on the 九月 5, 2006

无意中找到一个Unix编程FAQ,更好运的是这已经被翻译成中文版了!虽然比较旧了,但还是很有用。
linuxforum.net提供。感谢他们所做的贡献。

下面贴出章节目录。原文还是在linuxforum.net上,这样应该不算是盗链吧!

Table of Contents
关于
原英文版
原始中文版
本中文HTML文档
1. 进程控制
1.1. 创建新进程:fork函数
1.1.1. fork函数干什么?
1.1.2. fork函数与vfork函数的区别在哪里?
1.1.3. 为何在一个fork的子进程分支中使用_exit函数而不使用exit函数?
1.2. 环境变量
1.2.1. 如何从程序中获得/设置环境变量?
1.2.2. 我怎样读取整个环境变量表?
1.3. 我怎样睡眠小于一秒?
1.4. 我怎样得到一个更细分时间单位的alarm函数版本?
1.5. 父子进程如何通信?
1.6. 我怎样去除僵死进程?
1.6.1. 何为僵死进程?
1.6.2. 我怎样避免它们的出现?
1.7. 我怎样使我的程序作为守护程序运行?
1.8. 我怎样象ps程序一样审视系统的进程?
1.9. 给定一个进程号,我怎样知道它是个正在运行的程序?
1.10. system函数,pclose函数,waitpid函数的返回值是什么?
1.11. 我怎样找出一个进程的存储器使用情况?
1.12. 为什么进程的大小不缩减?
1.13. 我怎样改变我程序的名字(即“ps”看到的名字)?
1.14. 我怎样找到进程的相应可执行文件?
1.14.1. 那么,我把配置文件放在哪里里呢?
1.15. 为何父进程死时,我的进程未得到SIGHUP信号?
1.16. 我怎样杀死一个进程的所有派生进程?
2. 一般文件操作(包括管道和套接字)
2.1. 如何管理多个连接?
2.1.1. 我如何使用select()函数?
2.1.2. 我如何使用poll()?
2.1.3. 我是否可以同时使用SysV IPC和select()/poll()?
2.2. 我如何才能知道和对方的连接被终止?
2.3. 什么是读取目录的最好方法?
2.4. 我如何才能知道一个文件被另外进程打开?
2.5. 我如何锁住一个文件?
2.6. 我如何能发现一个文件已由另外一个进程更新?
2.7. 请问du是怎样工作的?
2.8. 我如何得到一个文件的长度?
2.9. 我如何像shell里一样扩展在文件名里的’~'?
2.10. 有名管道(FIFO)能做什么?
2.10.1. 什么是有名管道?
2.10.2. 我如何建立一个有名管道?
2.10.3. 我如何使用一个有名管道?
2.10.4. 能否在NFS上使用有名管道?
2.10.5. 能否让多个进程同时向有名管道内写入数据?
2.10.6. 有名管道的应用
3. 终端输入/输出
3.1. 我怎样使我的程序不回射输入?
3.2. 我怎样从终端读取单个字符?
3.3. 我怎样检查是否一个键被摁下?
3.4. 我怎样将光标在屏幕里移动?
3.5. pttys是什么?
3.6. 怎样控制一个串行口和调制解调器?
3.6.1. 串行设备和类型
3.6.2. 设置termios的标志位
4. 系统信息
4.1. 怎样知道我的系统有多少存储器容量?
4.2. 我怎样检查一个用户的口令?
4.2.1. 我怎样得到一个用户的口令?
4.2.2. 我怎样通过用户号得到阴影口令文件中的口令?
4.2.3. 我怎样核对一
用户的口令?
5. 编程杂技
5.1. 我怎样使用通配字符比较字符串?
5.1.1. 我怎样使用文件名通配模式比较字符串?
5.1.2. 我怎样使用正则表达式比较字符串?
5.2. 什么是在程序中发送电子邮件的最好方法?
5.2.1. 简单方法:/bin/mail
5.2.2. 直接启动邮件传输代理:/usr/bin/sendmail
6. 工具的使用
6.1. 我怎样调试fork函数产生的子进程?
6.2. 怎样通过其他库文件建立新的库文件?
6.3. 怎样创建动态连接库(shared library)/dlls?
6.4. 我能更改一个动态连接库里的目标吗?
6.5. 我能在一个运行着的程序中生成堆栈映象吗?
7. 范例程序
捕获 SIGCHLD 信号
读取进程表 – SUNOS 4 版
读取进程表 – SYSV 版
读取进程表 – AIX 4.2 版
使用popen函数和ps命令读取进程表
守护程序工具函数
调制解调器控制范例程序
事务控制范例程序

powered by performancing firefox

QT3 编程的 hello world

Posted in 程序设计 由 lerosua on the 六月 23, 2006

未来可能需要使用QT编程,因此这里记下QT下的hello world程序吧!

下面文件保存为hello.cpp

#include <qt3/qapplication.h>
#include <qt3/qlabel.h>

int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QLabel *label=new QLabel("hello QT!",0);
app.setMainWidget(label);
label->show();

return app.exec();
}

编译的方法:

qmake -project

qmake

make

现在可以执行程序 ./hello

和我以前写过的gtk的第一个程序一样,什么也不能干的就显示一个字符串的窗口。虽然简陋,但也是踏出了第一步!每句的代码具体是什么意义慢慢理解

要注意的问题是要装齐开发包,不然编译会不提示找不着文件之类的错误的。如果不知道要装哪些开发就把 apt-cache search qt3|grep dev 找到的包都给装上吧,这一定能成了吧!呵呵。

我看的书的示例中包含的头文件中是不用qt3/qapplication.h 而直接使用qapplication.h ,我试过,在我系统不通过编译。原因是这样直接包含头文件的话它会在/usr/share/qt3/include 里找文件,但我默认装上的qt3在/usr/share/qt3下没有include目录,全是在/usr/include/qt3下面的。因此我改了包含的头文件才通过编译。

有机会,慢慢学习(最近搞的东西太泛了~──)

libglade for python 入门

Posted in 程序设计 由 lerosua on the 六月 12, 2006

Libglade 是一个使用 Glade 生成代码的替代手段. 使用 Glade 设计 用户界面时, 使用一个叫 XXX.glade 的 XML 文件来描述界面中的各控件及其 属性, 并且可以直接生成相应的 c/c++ 的 GTK 代码. 和从 XML 界面描述 中生成代码不一样的是, libgalde 在运行时装载和分析 XML 界面描述文件. 它也提供了许多函数, 用于设置界面中各控件的信号处理函数.

通过这种方式, 使得你的程序代码从界面代码中分离出来.

上面文字引自gnome-cn的libglade编程介绍。关于libglade的介 绍请阅读上面站点的内容。下面是一个用python语言调用libglade的演示代码。

#!/usr/bin/env python
#testing libglade for python
#filename: libpygtk.py
#author lerosua

import pygtk
pygtk.require("2.0")

import gtk
import gtk.glade

class testglade:
  def delete_event(self,widget,event,data=None):
    return gtk.FALSE
  def destroy(self,widget,data=None):
    gtk.main_quit()
  def __init__(self):
    self.xml=gtk.glade.XML('libpygtk.glade')
    self.mainwindow=self.xml.get_widget('mainWindow')
    self.mainwindow.connect("delete_event",self.delete_event)
    self.mainwindow.connect('destroy',self.destroy)

  def main(self):
    gtk.main()

if __name__ == "__main__":
    window=testglade()
    window.main()

代码很简单。新建一个testglade类。一开始是定义了两个回调函数。在构造方法中,testglade类从libpygtk.glade文件中得到xml数据。然后从xml中得到主窗体构件(mainWindow)。其它窗体构件也可以用这种方法得到。信号连接,调用的是构件的connect方法。main()方法则是进入gtk事件循环。

if语句处是程序入口。定义一个类的实例,进入gtk事件循环。窗体显示。

现在,用glade画一个窗体吧,主窗体的名字用mainWindow,保存的文件名叫libpygtk.glade.并放到与上面代码相同目录下。 OK,运行上面的python代码吧!

python libpygtk.py

程序界面出来了吧!比C语言版本简单吧。呵呵!如果想深入学习可以参考一下相关源代码。Blogtk是用libglade和python写,不错的参考对象。本文就是参考它写的。