Linux Programming
文章平均质量分 64
High_High
让漫天繁星在指尖随心闪耀。
展开
-
Debugging - Instrumentation - Use macro
使用C++宏定义来方便的决定的在编译后的程序中是否包含调试代码。翻译 2010-12-20 05:19:00 · 759 阅读 · 0 评论 -
库函数和系统调用
系统调用(system call)是操作系统内核提供的函数,在内核态运行(kernel mode),属于函数中的低等下人,终身代号9527,虽然低等,但是谁也离不开他们,因为离开他们就没办法和内核打交道了,没办法和内核打交道就什么都歇菜了。。。linux3.0.0-14的系统调用有346个,可以在源码的 linux-3.0/arch/x86/kernel/syscall_table_32.S文原创 2012-01-14 05:47:30 · 6569 阅读 · 0 评论 -
多线程程序在内存中的分布
上一篇博客谈到了普通程序在内存中的分布,这篇博客谈谈文艺程序在内存中的分布。执行环境首先缕一下概念吧。在linux下,进程(process)和线程(thread)并没有什么区别,都是一种执行环境(context of execution, COE),在linux下统称为task。每个执行环境都有自己的状态,包括CPU状态,内存映射状态,权限状态(uid,pid)和各种各样的通信状态(打原创 2012-01-21 06:49:57 · 9408 阅读 · 0 评论 -
Debugging with gdb
使用-g选项来在编译后的程序中加入调试信息。 gcc -g -o debug debug.c 然后就可以启动gdb进行调试了。gdb debug 一些常用的命令:help 帮助信息run (r) 运行程序cont (c) 继续运行step (s) 步进到下一行(遇到函数会原创 2010-12-20 08:27:00 · 1343 阅读 · 0 评论 -
C/C++的预编译和宏定义
预编译是整个编译过程的第一步,是g++ -E选项输出的结果。这个步骤处理的是源文件/头文件中的宏,宏指令常用的有以下几类:文件包含:#include宏定义:#define、#undef条件编译:#ifdef、#ifndef、#if、#elif、#else、#endif1. 文件包含 #include预处理会把要包含的文件的内容全部包含进来,比如下面这个文件prepro.cpp:原创 2012-02-24 09:36:51 · 9231 阅读 · 0 评论 -
几点学习linux编程的建议
我个人用了3、4年linux,从当初的小菜鸟到现在的大菜鸟,积累了一些经验,现在分享给大家,尤其是初学者。弄linux的环境大体有3种办法:在windows上安装cygwin在windows上安装虚拟机,再安装linux直接装linux,弄个双系统3种办法我都用过,目前我个人是双系统,但是对于初学者,我强烈推荐使用第一种方法,是的,极其强烈。原因很简单,就是cygwin安装简单,不原创 2012-02-18 08:58:54 · 41400 阅读 · 12 评论 -
linux编程之动起手来
有了一个linux环境以后,接下来要做的事情就是熟悉它。而那些bash命令显然满足不了我们的需求,于是,让我们真刀真枪在linux下编程序吧。第一个程序第一个程序当然是老掉牙的hello world了。打开心爱的linux的家:cygwin,接下来怎么新建文件,怎么写程序呀?这个问题的答案也是我推荐cygwin的一个原因,就是你可以在windows下用记事本或者你喜欢的IDE把程序写好原创 2012-02-19 09:35:16 · 7960 阅读 · 0 评论 -
编译器g++
g++是GNU编译工具集(GCC)中的一个组件,用来编译C++语言写的源文件。从C++源文件到可执行文件的编译过程,有如下几个步骤,g++提供了很多编译选项,可以让我们控制整个编译过程:预编译(g++选项 -E)结果直接输出到控制台编译 (g++选项 -S)结果保存为.s文件,汇编文件汇编 (g++选项 -c)结果保存为.o文件,目标文件(object file)链接 (g++选项原创 2012-02-20 11:47:31 · 11223 阅读 · 0 评论 -
小问题集。。。
(edges:11362): Gtk-WARNING **: Unable to locate theme engine in module_path: "pixmap",解决:安装gtk2-engines-pixbuf,ubuntu software center 里面有,也可以用命令安:suto apt-get install gtk2-engines-pixbuflinux下重启原创 2012-01-12 04:02:13 · 975 阅读 · 0 评论 -
linux编程之emacs
在linux下编程,有两个编辑器是肯定会听说的,vim和emacs,个人感觉这两个编辑器和IDE比也真是有过之而无不及啊。我自己先学了emacs,而且用起来很顺手,所以暂时也没学习vim的打算,这里只能说说emacs。当然不是说vim不好,关于这两个编辑器的口水已经够多了,我只能引用某个大牛的一句话:“emacs有的功能,vim都有,反之亦然。”其实只要能把活漂亮的干完,你喜欢用记事本也可原创 2012-04-01 09:33:34 · 21438 阅读 · 0 评论 -
不光是汇编开发指南
Linux 汇编语言开发指南写的挺不错的。原创 2012-02-15 01:02:33 · 2684 阅读 · 0 评论 -
keyboard buffer
// also as note for interruptWhen a key is either pressed or released, an interrupt is generated. On an ISA machine this interrupt is allotted, IRQ#1, which in turn is reported by the interrupt cont转载 2012-03-21 09:25:49 · 3234 阅读 · 0 评论 -
git命令
详细的git详解请参见另外一篇博客,我也是从那学习的,猛击进入=========华丽丽的分割线==========以下是个人memo :)同步远程服务器上的数据到本地: git fetch origin // 3. git分支新建分支:git branch videoplay转移到新分支videoplay:git checkout videoplay合并vi原创 2012-03-12 07:02:22 · 3114 阅读 · 0 评论 -
qt下的跨目录多工程编译
这里要编译的工程包含一个库和一个可执行文件。可执行文件依赖于库,所以要先编译库,编译后库放在lib目录里面,可执行文件放在bin目录里面。目录结构如下:.├── app│ ├── app.pro│ ├── appwindow.cpp│ ├── appwindow.h│ └── main.cpp├── bin├── complex.pro├── inclu翻译 2012-03-23 02:07:54 · 13620 阅读 · 6 评论 -
谈谈程序在内存中的分布
作为一个菜鸟,这个题目有点大,所以这篇博客缺点是可能不够深入,但应该还是很详细的,希望能对大家有所帮助。1.简介加初步分析在linux系统中,程序在内存中的分布如下所示:低地址.text.data.bss heap(堆) --> unused env高地址其中 :.原创 2012-01-15 12:04:10 · 9997 阅读 · 6 评论 -
ubuntu 11.10下装opencv2.3
ubuntu自带的软件中心里面的 opencv版本是2.1,但是我想装2.3,就在网上搜了下,有个貌似是个人的repository可以下载到。具体点击这里查看,下面贴的是那篇博客里面的内容和我自己的一点补充:OpenCV 2.3 packages for Ubuntu 11.10Read more about the OpenCV project: * http://转载 2012-01-12 03:21:44 · 1548 阅读 · 0 评论 -
关于linux下的库文件
先说说库文件是怎么来的吧。以C为例,我们写一个程序,一般都不会把所有的函数都写在一个文件里面,通常都是划分模块,然后一个模块若干个文件,然后在main文件里面调用这些模块。我这里用一个magic.c文件代替实际程序中的所有的文件,你就当这个magic.c文件非常神奇,你调用里面的magic()函数后,它会自动按你的想法把剩下的工作都完成。下面是两个文件:mian.cint main原创 2012-01-11 14:29:38 · 10750 阅读 · 8 评论 -
Debugging tools
辅助调试的一些工具,静态的,动态的。翻译 2010-12-21 05:29:00 · 1872 阅读 · 0 评论 -
Process
The UNIX standards, specifically IEEE Std 1003.1, 2004 Edition, defines a process as "an address space with one or more threads executing within that address space, and the required system resources for those threads." We can regard a process as just a pro原创 2010-12-26 01:07:00 · 724 阅读 · 0 评论 -
Thread
Multiple strands of execution in a single program are called threads. A more precise definition is that a thread is a sequence of control within a process. There is a whole set of library calls associated with threads, most of whose names start with pthrea翻译 2010-12-26 01:42:00 · 688 阅读 · 0 评论 -
Signal
A signal is an event generated by the UNIX and Linux systems in response to some condition, upon receipt of which a process may in turn take some action. We use the term raise to indicate the generation of a signal, and the term catch to indicate the原创 2010-12-29 06:05:00 · 1127 阅读 · 0 评论 -
Inter-process Communication:Pipes
We use the term pipe to mean connecting a data flow from one process to another.Perhaps the simplest way of passing data between two programs is with the popen and pclose functions:#include FILE *popen(const char *command, const char *open_mode);int翻译 2011-01-08 12:31:00 · 785 阅读 · 0 评论 -
Build Linux Kernel
<br />make mrproper<br />make menuconfig<br />make dep<br />make clean<br /> <br />---------------------<br />make bzImage<br />make modules<br />---------------------<br />上面这两步现在可以直接make,具体参考make时候提示。<br /> <br /> <br />make modules-install<br />mkinitrd原创 2011-01-27 10:14:00 · 858 阅读 · 0 评论 -
find和grep
shell 中超级有用的两个命令,find 和 grep.原创 2011-03-15 11:02:00 · 818 阅读 · 0 评论 -
Socket
Socket的一个简介,包括建立socket连接server和client所有需要的函数以及一个小例子。转载 2011-04-03 11:58:00 · 759 阅读 · 0 评论 -
扩展gdb命令
在gdb中调试c++代码,代码中用到了stl的容器,要在gdb中显示容器对象的内容的命令比较冗长,如下所示:print *(farmers._M_impl._M_start)@5有一个名为farmers的vector, 显示容器对象farmers前5个元素。每次都写这个命令很烦,就自定义一个gdb命令,在一个文件(命名为gdb.conf)中定义一个自己的命令:defin原创 2011-12-23 05:08:28 · 1353 阅读 · 0 评论 -
Linux 下的文件操作
Linux 下的文件操作1. 使用系统调用Linux提供了一些系统调用(System Call) 来进行文件操作,包括:open, read, write, close, lseek, ioctl, etc. (PS:系统调用可以使用汇编语言调用)其他所有系统调用都定义在 unistd.h 中,只有open找不到,用下面的代码试了一下:int main(){ int fd;原创 2011-12-26 07:23:23 · 5988 阅读 · 0 评论 -
linux下的文件操作2
linux下的文件操作2之前讲了系统调用和库函数在文件操作方面的联系和区别,并以打开文件举了几个例子。打开文件后当然不是为了关闭文件,而是为了读取或者写入文件,所以现在整理一下文件的读写。系统调用提供的文件读写函数有:read, write 等,但是我们不用它们,麻烦,一般都使用库函数提供的文件读写函数(这里是C的库函数,其他的不熟)。先讲读取文件。库函数提供的文件读取函数大致能分三个原创 2011-12-27 12:25:12 · 1572 阅读 · 0 评论 -
C调用汇编
例子:在C的main函数中调用汇编语言写的addone函数,把传入的参数加一然后返回。汇编里面首先要把用到的寄存器压栈,使用指令global使函数可以在其他文件中调用,顺便说一句,C中的static函数之所以只能在本文件中可用,就是编译后的汇编文件没有用global指令,汇编的返回值放在EAX寄存器中。汇编文件名是addone.asm,汇编方法在后面,内容如下:global add原创 2012-01-08 04:18:42 · 7664 阅读 · 0 评论 -
编译开源软件的一个问题----pkg-config找不到库
一般编译开源软件的第一步都是运行./configure,确定编译软件需要的命令或者库在系统中都能找到,然后再运行./make去编译。但是运行./configure有时候会报错,说需要的库找不到,而设置LD_LIBRARY_PATH后还是可能找不到库(如何设置参见这篇博客)。找不到库的原因是./configure里面调用了另外一个程序:pkg-config,这个程序负责在.pc后缀的文件中找原创 2012-01-12 00:46:28 · 3023 阅读 · 0 评论 -
linux编程之查看帮助
想要在linux下独挡一面的编程,有一技能必须掌握,那就是查看帮助。可能你习惯用google,百度来找帮助,但是使用下面的方法,获取信息更快,学习起来也更系统些。要查看一个命令的帮助有两个方法:命令 + --helpman + 命令这两种方式一般命令都会有其中一种形式,有些两种形式都有,而它们的输出也很类似,都会告诉你命令的用法和命令支持的选项,比如:g++ --hel原创 2012-02-21 11:16:27 · 4626 阅读 · 0 评论