上一页 1 ··· 40 41 42 43 44 45 46 47 48 ··· 71 下一页
摘要: 有时我们需要读取链接文件指向的内容,比如,给定一个进程的fd,我们想知道这个fd具体是什么东西,那么,就可以在/proc/<pid>/fd目录下看到该fd指向的内容,只不过这个目录下该fd是一个链接文件,我们需要的是该文件指向的内容。此时就可以用readlink这个system call,具体用法很简单,比如:Code: Select all char proc_fd_path[255]; char fd_des_buf[255]; ssize_t fd_des_len; /* Get fd descriptions, fd is the input parameter */ sp 阅读全文
posted @ 2011-03-26 10:04 super119 阅读(895) 评论(0) 推荐(0) 编辑
摘要: glibc提供了backtrace这个库函数,可以用来打印call stack。这个对于debug非常的有帮助。比如我们可以在程序中注册常见的一些signal,比如SIGSEGMENT, SIGPIPE,然后在这些信号的回调函数中,利用backtrace打印出call stack,这样debug就非常的方便。backtrace的使用很简单,使用man手册中的Example代码即可,例如:Code: Select all char strbuffer[1024]; int errcode; int btnum = 0; void *btbuf[100]; char **btstrings = N 阅读全文
posted @ 2011-03-26 10:04 super119 阅读(1172) 评论(0) 推荐(0) 编辑
摘要: semaphore很类似windows下的kernel object,一旦创建,可以被多个进程使用,当然一个进程中多个线程也可以使用semaphore来互斥。谈到互斥,一般semaphore的值就是 1。man 7 sem_overview可以看到很多有用的信息,再结合sem_open, sem_wait, sem_post这些函数的man手册,就可以把程序编的七七八八了。Semaphore和pipe一样,也有有名的和无名的两种。无名的嘛,在父子进程间使用比较方便,有名的嘛,在不搭界的多进程中使用很方便。这里贴一段代码,代码最能说明问题,其他都参考manual就OK了。在Fix TI的一个bu 阅读全文
posted @ 2011-03-26 10:03 super119 阅读(2148) 评论(0) 推荐(0) 编辑
摘要: lthough system uses "fork" & "exec" function to replace the whole process address space, but in child process, the FDs will still be inherited from parent process. About whether signals are inheritted, I'm not sure but seems it's very possible.So be careful with " 阅读全文
posted @ 2011-03-26 10:02 super119 阅读(256) 评论(0) 推荐(0) 编辑
摘要: addr2line,输入一个地址,指定一个带-g编译的可执行程序,就可以打印出该地址对应的代码行。其实gdb也有这个功能,不过addr2line的好处是,很多时候,bug很难重现,我们手上只有一份crash log。这样就可以利用addr2line找到对应的代码行,很方便。前提条件是:1. 该可执行程序用-g编译,带调试信息(所谓调试信息就是代码和地址的一个对应关系的信息)。2. 如果crash在一个so里面,那addr2line不能直接给出代码行。因为我们都知道,so里面的地址在可执行文件装载的时候,是可以被 reallocate的。在windows核心编程中说dll的加载逻辑的时候,也提到 阅读全文
posted @ 2011-03-26 10:00 super119 阅读(2793) 评论(0) 推荐(0) 编辑
摘要: 这两个函数都是linux实现i18n需要用到的。其中setlocale用来设定locale,比如LC_ALL,LC_CTYPE等,一般用法是:setlocale(LC_ALL, "")这用来设置LC_ALL,第二个参数是一个空字符串表示使用环境变量中定义的LC_ALL的值。然后就是用bindtextdomain,比如:bindtextdomain("libgammu", LOCALE_PATH);Linux i18n中,每个资源文件是.mo文件,这个文件是二进制的,用工具针对一个文本生成(作成二进制应该是考虑了性能)。所以,上面的代码 中,LOCALE_ 阅读全文
posted @ 2011-03-26 10:00 super119 阅读(2854) 评论(0) 推荐(0) 编辑
摘要: 1. SMP机器中实现并行常见的做法就是使用threads, hardware vendors有自己的threads实现,但是给程序移植带来很大问题。于是,对于UNIX系统来说,IEEE POSIX 1003.1c标准出台,这就是POSIX Threads -- pthread 2. 据我所知,有一个open source的项目,是一个library,实现了windows下的pthread,简单来说,将我们写的pthread的函数映射到了windows 下的线程操作函数上。windows本身并不支持pthread,pthread更多是用于UNIX系统的 3. 这里有个对thread的精彩概括, 阅读全文
posted @ 2011-03-26 09:59 super119 阅读(540) 评论(0) 推荐(0) 编辑
摘要: 在做DealSpider的时候,必须要知道页面的charset,然后转成UTF-8,最后才能用glib的正则表达式来进行匹配和搜索。CURL本身 是不提供这样的功能的,之前在curl_easy_setopt的man手册中看到了:CURLOPT_CONV_TO_NETWORK, CURLOPT_CONV_FROM_NETWORK,以为这两个可以自动进行转码,后来发现是不行的。这两个仅仅是用于non-ascii平台的。什 么是Non-ASCII平台?简答来说,就是不是所有的计算机系统都用ASCII码的,比如IBM的mainframe机器。在这种机器上,由于不使用 ASCII码,而像http, ft 阅读全文
posted @ 2011-03-26 09:59 super119 阅读(542) 评论(0) 推荐(0) 编辑
摘要: 有关这两者的区别和联系,之前其实一直都非常的模糊,特别是extern关键字。这次读C++ Primer,在第二章正好读到,于是好好理解了一次,而且做了一些代码测试。结论是这样的: 1. definition只能用于变量,也就是定义一个变量,此时,变量的内存空间会被分配。诸如int i, int i = 10这样的都是definition,因为i变量会被分配内存。 2. declaration可以用于变量或类型(比如声明一个struct,但是不定义变量),如果用于变量,该变量不会被分配内存,而且前面必须加上 extern(表示这个变量的definition不是在这里,而且在其他地方,所以是ext 阅读全文
posted @ 2011-03-26 09:57 super119 阅读(868) 评论(0) 推荐(0) 编辑
摘要: 写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide)。在早期的C++书籍中,可能翻译的 人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的,他们是英语专业的),常常把重载(overload)和覆盖(override)搞错! 我们先来看一些代码及其编译结果。 实例一: Code: Select all#include <iostream>using namespace std;class CB{public: void f(int) { cout << "CB::f(int)" <&l 阅读全文
posted @ 2011-03-26 09:57 super119 阅读(749) 评论(0) 推荐(0) 编辑
上一页 1 ··· 40 41 42 43 44 45 46 47 48 ··· 71 下一页