随笔分类 -  Linux

上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 22 下一页
摘要: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 阅读(260) 评论(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 阅读(2825) 评论(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 阅读(2863) 评论(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 阅读(547) 评论(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 阅读(553) 评论(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 阅读(878) 评论(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 阅读(757) 评论(0) 推荐(0) 编辑
摘要:static用来修饰一个函数的时候,表示的意思如下: 1、表示该方法只在本c文件中有效。在其他c文件中无法访问这个方法。 2、static的方法的定义一般不放在.h文件中,因为这个方法只在一个c文件中有效。一般直接将该方法定义在c文件的开头部分就可以了。 3、一般申明这种方法用来封装一些逻辑,和面向对象的private有点类似。比如,我们申明一个方法为static,然后申明一堆其他的方法 (根据用途的不同),这些方法会用不同的参数调用该static方法,而这些方法不是static的,所以,这些方法是可以被其他文件调用的,而这个 static方法封装了所有的逻辑,而且只在本c文件中有效,有效避免 阅读全文
posted @ 2011-03-26 09:56 super119 阅读(537) 评论(0) 推荐(0) 编辑
摘要:阅读了C++ Primer 4th第七章,有了明确的答案。 首先,函数的参数。 如果参数类型不是reference的,那么,函数的调用方压入的参数(我们称之为argument,函数本身的参数我们称为 parameter,两者区分来),会被copy一份,然后被赋予到parameter中。如果很不幸这个参数是个vector,那么,整个 vector,包括里面所有的元素,都会被copy一份,这就是参数拷贝。 如果参数类型是reference类型的,那么,就不会有上述的参数拷贝的过程。 很显然,如果有参数拷贝的动作,那么,在函数中对parameter的修改,不会影响到argument。如果没有参数拷贝 阅读全文
posted @ 2011-03-26 09:56 super119 阅读(715) 评论(0) 推荐(0) 编辑
摘要:关于C语言中有符号的整数值范围为什么是从-32768~32767 悬赏分:5 - 解决时间:2008-7-9 13:57 尽量讲得详细些!例如16个1111111111111111头位是符号位,这应是-32767,那-32768怎么 用16位二进制来表示? 问题补充:负数的二进制表示怎么算的? 例如: -1 的二进制 -32767 的二进制 答案: -2^15~(2^15-1) 计算机中数字是以补码存储的 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 在C中,用高位置1来表示负数,in 阅读全文
posted @ 2011-03-26 09:55 super119 阅读(11080) 评论(0) 推荐(0) 编辑
摘要:当有多个程序使用同一个共享库的时候,我们都知道,多个程序有多个进程,但是共享库在内存中只有一份。所以问题来了:如果我在共享库中定义了全局变量,那 么全局变量是不是也只有一份?如果是这样,那么当多个进程都在使用这个共享库的时候,就有问题了。比如:我们在共享库中定义了一个全局变量 server_inited,用来表示一个socket server是否已经启动成功了,如果这个变量是TRUE,那么,下次用户调用启动server的函数的时候,这个函数一check这个变量,发现已经是 TRUE了,就不会再启动server了。这样就导致了一个进程调用过了一次启动server的函数之后,其他进程再调用这个函数 阅读全文
posted @ 2011-03-26 09:54 super119 阅读(1897) 评论(2) 推荐(1) 编辑
摘要:首先来看CPU使用率到底是怎么算出来的。依据的是这个公式:(process jiffies) * 100.0f / ((float)Hertz * (float)et * (Rc.mode_irixps ? 1 : Cpu_tot));process jiffies是内核提供的该进程在DeltaT时间内消耗的jiffies。具体是/proc/<pid>/stat文件的第14-17 token。14-17token分别是utime, stime, cutime, cstime。cutime/cstime分别是该进程spawn的子进程在用户态和内核态消耗的jiffies。/proc/& 阅读全文
posted @ 2011-03-26 09:53 super119 阅读(2007) 评论(0) 推荐(0) 编辑
摘要:本文介绍了如何运行一个Python程序,有价值的信息不多,罗列如下: 1. 第一种方式叫Interactive Coding,就是在Python的shell下输入语句。这样做的代价是代码一被输入就会被执行,可以用来快速的做单元测试(比如想知道某句代码应该怎 么写来满足需求,可以用这种模式)。这里需要注意的是以下几点:a) 这种模式下不需输入print语句,直接输入表达式或变量,就能打印出表达式和变量的值 b) 这种模式下输入的代码不能带有前置空格,也就是不能以空格打头 c) 如何输入一个复合语句,也就是这是一段代码,不是一句。当我们输入一段复合语句时,Python shell的prompt会从 阅读全文
posted @ 2011-03-20 14:17 super119 阅读(445) 评论(0) 推荐(0) 编辑
摘要:Chapter1没有什么好记录的,主要是讲解Python能做什么,优点和缺点。读下来只有一个感觉,就是Python和JAVA非常的相似,几乎雷同,不过就是JAVA更power一些,呵呵。 Chapater2 1. Python是如何运行一个.py脚本的。首先和JAVA一样,Python要把一个.py文件翻译成所谓的byte code,这个byte code是Python自定义的一种和平台无关的语言代码。然后byte code给PVM(Python Virtual Machine),由PVM解析运行-简直和JAVA是一模一样的啊。上述过程描述成图如下: 2. 上图也可以看出,Python会把.p 阅读全文
posted @ 2011-03-20 14:17 super119 阅读(259) 评论(0) 推荐(0) 编辑
摘要:1、Python program structures. (1) Programs are composed of modules. (2) Modules contain statements. (3) Statements contain expressions. (4) Expressions create and process objects. 2、Python built-in Types: 如图所示,List是指没有重复元素的collection;Dictionary是指key-value这样存储的集合;Tuple应该就是collection吧,这个不是很清楚,后面会详细讲;本章 阅读全文
posted @ 2011-03-20 14:16 super119 阅读(806) 评论(0) 推荐(0) 编辑
摘要:Learning Perl 4ED Reading Notes Chapter2 Scalar Data 1. Numbers. 所有的数据(int,float)在Perl内部都是double类型。当然,有的时候Perl在内部也会使用integer来表示int,因为这样可以 提高程序的运行速度,但是这些逻辑对于程序员来说都是invisible的,所以,我们完全可以不用关心。 2. Floating-Point and Integer Literals. For example: 1.25 255.0 7.25e45 -12e-24 0 2001 -40 这样的也是可以的:61_344_3434 阅读全文
posted @ 2011-03-20 14:11 super119 阅读(309) 评论(0) 推荐(0) 编辑
摘要:1. List and Array. 本书中所讲的List是一种数据结构,Array是Perl中用来存放List的数据类型。大部分情况下,这两个单词可以互换,意思是一样的。和C不一样 的是,Perl的Array不用定义元素的类型,也就是说,Perl中的Array中的每个元素可以是Number,也可以是String,元素的类型没 必要都一样。和C相同的就是,对Array的访问都是通过下标进行的,第一个元素的数组下标是0。 2. Perl中的Array用起来和C中的没什么区别: $fred[0] = "yabba"; $fred[1] = "dabba"; 阅读全文
posted @ 2011-03-20 14:10 super119 阅读(280) 评论(0) 推荐(0) 编辑
摘要:1. 有关function和subroutine。本书中的function指的是Perl built-in的函数,subroutine指的是user-defined 函数,本质上来说,function和subroutine是一回事。和Pascal不一样,Pascal中的function和subroutine是 不一样的,function有返回值,而subroutine是没有返回值的。 2. Defining a Subroutine. 很简单: Code: Select allsub marine { $n += 1; # Global variable $n print "Hell 阅读全文
posted @ 2011-03-20 14:09 super119 阅读(217) 评论(0) 推荐(0) 编辑
摘要:Edit->Preferences->Content,Fonts部分,点Advanced然后选择Fonts for: Simplified Chinese将Serif, Sans-Serif, Monospace选成WenQuanYi Micro Hei, WenQuanYi Micro Hei, WenQuanYi Micro Hei Mono就OK了。 阅读全文
posted @ 2011-03-15 22:53 super119 阅读(257) 评论(0) 推荐(0) 编辑
摘要:Eclipse就有类似的功能,就是发现一段代码缩进不对了,直接选中这一段,然后选择format selection,Eclipse就会自动将代码的缩进全部调整好。SlickEdit菜单中没有找到该功能,但是有这样的命令:c-format-selectionc-beautify-selection貌似两个没有明显区别。有了命令就简单了,选中要format selection的代码,然后ESC,输入命令即可。当然,也可以给命令设置快捷键。 阅读全文
posted @ 2011-03-15 22:11 super119 阅读(381) 评论(0) 推荐(0) 编辑

上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 22 下一页