
Linux Programming
文章平均质量分 65
wind19
相互学习,共同进步
展开
-
fork()需要注意的一些问题
fork函数用户创建一个和自身一样的子进程,子进程是父进程的副本,子进程得到与父进程用户级虚拟地址空间相同的(但是独立的)一份拷贝,包括文本、数据和bss段、堆以及用户栈等。子进程还获得与父进程任何打开文件描述符相同的拷贝(比如子进程可以读写父进程中任何打开的文件),他们有完全独立的拷贝(当然linux使用了cow技术,只有改变才会真的拷贝),就是说两边的修改互不影响,父进程和子进程之间最大的区别原创 2017-05-10 23:56:11 · 2630 阅读 · 0 评论 -
select、poll、epoll之间的区别总结[整理]
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用转载 2014-12-30 10:35:43 · 1933 阅读 · 0 评论 -
swap的使用和调整
linux支持虚拟内存,用作虚拟内存的硬盘部分被称为交互空间(swap space),虚拟内存是指使用磁盘当作内存的扩展,这样可用内存的大小就相应的增大了。内核会将暂时不用的内存块的内容写到硬盘上,从而空闲的内存就可用于其他目的。当需要用到原始内容时,再从硬盘重新读入内存。但读写硬盘的速度比直接使用内存要慢得多,数千倍。linux可以使用文件系统中的一个常规文件或一个独立的分区作为交换空间。交转载 2015-01-16 11:32:51 · 10603 阅读 · 0 评论 -
Linux下gcc编译控制动态库导出函数小结
根据说明文档“How To Write Shared Libraries"介绍,有四种方法:1. 在方法声明定义时,加修饰:__attribute__((visibility("hidden")))就是说将不公开的函数都加上这个属性,没加的就是可见的2. gcc 在链接时设置 -fvisibility=hidden,则不加 visibility声明的都默转载 2014-03-13 19:07:05 · 6260 阅读 · 0 评论 -
linux动态库的初始化和清理
a. Windows 中有 DllMain 入口函数, 而 Linux 中则没有。 b. Linux 中有特殊函数 _init 和 _fini, 主要是分别用来初始化函数库和关闭的时候 做一些必要的处理, 我们可以把自己认为需要的代码放到这两个函数里面, 它们分别 在函数库被加载和释放的时候被执行。具体说, 如果一个函数库里面有一个名字为 "_转载 2014-08-07 16:25:43 · 9028 阅读 · 0 评论 -
pthread_cond_wait
1. 首先pthread_cond_wait 的定义是这样的The pthread_cond_wait() and pthread_cond_timedwait() functions are used to block on a condition variable. They are called with mutexlocked by the calling thread or转载 2014-07-09 16:00:35 · 925 阅读 · 0 评论 -
undefined reference问题总结
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ticktick.blog.51cto.com/823160/431329 最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func'转载 2014-05-19 09:39:51 · 742 阅读 · 0 评论 -
解决Linux动态库版本兼容问题
说道“动态库版本兼容”,很多人头脑中首先蹦出的就是“Dll Hell”。啊,这曾经让人头疼的难题。时至今日,这个难题已经很好地解决了。 在进一步讨论之前来思考一个问题:Linux下为什么没有让人头痛的“DllHell”?回答这个问题,非常easy,因为——Linux下根本没有dll! 哈哈,当然这只是个玩笑,接下来展开一下这个话题,很多有动态库的系统都会面临这个难题,但各自解决转载 2014-03-14 09:37:34 · 18856 阅读 · 0 评论 -
在centos 64下面安装gcc 4.1.2
因为编译的机器装了centos 6.5,上面的gcc比较新是4.7,而外面运行的机器试centos5.6,所以编译的程序放到上面跑了之后就会出现 /lib64/libc.so.6: version `GLIBC_2.8' not found等错误(就是libc的版本太低,不支持2.8,我们可以用命令 strings /lib64/libc.so.6 | grep GLIBC_来看库支持的版本)。原创 2014-01-27 14:58:48 · 7757 阅读 · 1 评论 -
Linux系统内存错误产生的原因及调试方法
来源:赛迪网 作者:kid 而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就转载 2010-06-09 13:19:00 · 1944 阅读 · 0 评论 -
理解和配置 Linux 下的 OOM Killer
最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题。这通常是因为某时刻应用程序大量请求内存导致系统内存不足造成的,这通常会触发 Linux 内核里的 Out of Memory (OOM) killer,OOM killer 会杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。如果检查相关的转载 2013-12-05 11:04:42 · 1183 阅读 · 0 评论 -
clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别
1. clock_gettime( ) 提供了纳秒的精确度int clock_gettime(clockid_t clk_id, struct timespect *tp);clockid_t clk_id用于指定计时时钟的类型,对于我们Programmr以下三种比较常用:CLOCK_REALTIME, a system-wide realtime clock.CLOCK_PR转载 2013-10-23 17:21:43 · 15085 阅读 · 1 评论 -
TCPCopy的安装和使用
官网地址 https://code.google.com/p/tcpcopy/ 里面有包的下载地址、文档 和常见问题。TCPCopy 有传统架构和新架构,新架构比较复杂,一般情况下传统架构就可以了。TCPCopy分为TCPCopy client和TCPCopy server,其中TCPCopy client运行在在线服务器上面,用来捕获在线请求数据包;TCPCopy server原创 2014-04-17 09:46:59 · 13957 阅读 · 0 评论 -
Linux下的一些时间说明
之前对时区这个东西没有仔细研究过,这两天在开发中遇到了相关的问题就仔细看了一下。首先几个概念,在网上搜索了一下1、UTC: Universal Time Coordinated 协调世界时,又称世界标准时间UTC指的是Coordinated Universal Time- 世界协调时间(又称世界标准时间、世界统一时间),是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的原创 2015-12-09 11:14:41 · 3500 阅读 · 0 评论 -
linux下使用动态库
linux下面使用动态库其实分为两个部分:1)编译;2)运行。编译的时候如果用到了动态库就需要加 -Lpath -lxxx来指定动态库,这点和静态库的使用是一样的,这里path是xxx库的路径,gcc会先去path下面查找 libxxx.so,如果没有找到再找libxxx.a,如果还是没哟找到则编译失败,否则编译成功。但是编译成功不代表可以运行,我刚开始的时候就犯了这个错误,认为编原创 2013-04-26 22:25:06 · 1060 阅读 · 0 评论 -
GNU Toolchain —— (三)gdb 调试
嵌入式系统中的gdb调试1、首先你要下在gdb的源代码,然后把它编译并安装成你的平台的xxx-linux-gdb。比如说arm-linux-gdb的编译放法如下:1) 下载GDB的源代码,如gdb-5.02) 执行如下指令:cd gdb-5.0./configure --target=arm-linuxmake(生成gdb)make install(生成arm-li原创 2008-10-04 12:44:00 · 2727 阅读 · 0 评论 -
GNU Toolchain —— (二)GCC参数详解
gcc是gnu compiler collection 的简称,他包含了多种语言的编译器,如C,C++,Objective-C,Objective-C++,Java,Fortran,andAda。但每种编译器的名字不一样,gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理原创 2009-07-06 18:00:00 · 2489 阅读 · 0 评论 -
GNU Toolchain —— (六)gprof的应用
一 gprof功能简介Gprof功能:打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程。 有了函数的调用关系,这会让开发人员大大提高工作效率,不用费心地去一点点找出程序的运行流 程,这对小程序来说可能效果不是很明显,但对于有几万,几十万代码量的工程来说,效率是毋庸置疑的!而且这个功能对于维护旧代码或者是分析Open Source来说那是相当诱人的,有了调用图,对程序的运行框架也就有转载 2011-01-04 14:46:00 · 1240 阅读 · 0 评论 -
GNU Toolchain —— (五)gcov与lcov入门
gcov是一个可用于C/C++的代码覆盖工具,是gcc的内建工具。下面介绍一下如何利用gcov来收集代码覆盖信息。想要用gcov收集代码覆盖信息,需要在gcc编译代码的时候加上这2个选项 “-fprofile-arcs -ftest-coverage”,把这个简单的程序编译一下gcc -fprofile-arcs -ftest-coverage hello.c -o hello编译后会得到一个可执行文件hello和hello.gcno文件,当用gcc编译文件的时候,如果带有“-ft转载 2011-01-05 10:42:00 · 3949 阅读 · 0 评论 -
GNU toolchain —— (一)介绍
GNU工具链(GNU toolchain)是一个包含了由GNU项目所产生的各种编程工具的集合。这些工具形成了一条工具链(串行使用的一组工具),用于开发应用程序和操作系统。 GNU工具链中包含的项目有:GNU make:用于编译和构建的自动工具;GNU编译器集合(GCC):一组多种编程语言的编译器;GNU Binutils:包含链接器、汇编器和其它工具的工具集;GNU Debugger(GDB):代码调试工具;GNU构建系统(autotools):AutoconfAutohea原创 2011-01-07 11:18:00 · 12356 阅读 · 0 评论 -
GDB调试问题集
ptrace: Operation not permitted早上发现一个进程没有相应, 试图gdb之.(gdb) attach 30721Attaching to program: /data0/s/bin/s, process 30721ptrace: Operation not permitted.晕倒, 俺已经是sudo权限了. 后来看到一篇博客说:当他已经在 gd原创 2011-12-16 09:46:11 · 3399 阅读 · 0 评论 -
gdb中的信号处理
info signals 可以查看当前一些信号的处理方式 nostop 当被调试的程序收到信号时,GDB不会停住程序的运行,但会打出消息告诉你收到这种信号。 stop 当被调试的程序收到信号时,GDB会停住你的程序。 print 当被调试的程序收到信号时,GDB会显示出一条信息。 noprint 当被调试的程序收到信号时转载 2013-01-17 16:27:57 · 1059 阅读 · 0 评论 -
GNU Toolchain —— (三)gdb 调试续
一、查看源文件这个问题问的也是很多的,太多的朋友都说找不到源文件。在这里我想提醒大家做下面的检查:编译程序员是否加上了-g参数以包含debug信息。路径是否设置正确了。使用GDB的directory命令来设置源文件的目录。下面给一个调试/bin/ls的示例(ubuntu下)$ apt-get source coreutils$ sudo apt-get in原创 2013-11-22 17:16:17 · 1433 阅读 · 0 评论 -
makefile笔记
The built in rules use a set of standard variables that allow you to specify local environment information (like where to find the ROOT include files) without re-writing all the rules. The ones most l原创 2012-05-18 10:45:44 · 747 阅读 · 0 评论 -
gcc编译链接的一些总结
编译链接的顺序-l library Search the library named library when linking. (The second alter- native with the library as a separate argument is only for POSIX compliance a原创 2017-02-15 15:21:49 · 1285 阅读 · 0 评论 -
Linux动态链接库的创建与使用
Linux动态链接库的创建与使用1. 介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。 程序函数库可分为3种类型:静态函数库(static libraries)、共享函数转载 2012-10-19 16:21:16 · 1040 阅读 · 0 评论 -
linux 下的内存共享
共享内存是最快的进程间通信方式, 因为进程可以直接读写内存。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域,而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没原创 2013-09-27 14:37:56 · 2603 阅读 · 0 评论 -
gperftools —— cpu profiler
安装32 位系统只要去https://code.google.com/p/gperftools/downloads/list下载gperftools安装就可以了,./configuremakemake install64位系统需要先安装libunwind库 http://gperftools.googlecode.com/svn/trunk/INSTALL 里面原创 2013-08-27 11:39:46 · 7901 阅读 · 0 评论 -
linux 下面的sleep,usleep,nanosleep 和select比较
sleep 时间单位是秒usleep的时间单位是微秒select的精度是微妙,精确struct timeval delay;delay.tv_sec = 0;delay.tv_usec = 20 * 1000; // 20 msselect(0, NULL, NULL, NULL, &delay);usleep()有有很大的问题在一些平台原创 2012-05-07 11:56:33 · 9913 阅读 · 1 评论 -
glibc, eglibc和 glib的区别
很多人会混淆glibc和glib,简单说一下他们的区别其实严格得说它们几乎没有任何关系glibc是linux下面c标准库的实现,当然linux下面的标准c库不仅有这一个,如uclibc 和 klibc,但是glibc无疑是用得最多的。而glib是GTK+的基础库,它由基础类型、对核心应用的支持、实用功能、数据类型和对象系统五个部分组成,可以在www.gtk.org网站下载其源代码。是一原创 2010-12-17 18:13:00 · 6200 阅读 · 0 评论 -
僵尸进程[转]
转自http://baike.baidu.com/view/758736.html 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进转载 2009-06-12 17:53:00 · 717 阅读 · 0 评论 -
GCC中使用预编译头文件
<br />既使用过 Microsoft? Visual C++? 又使用过 GNU CC 的网友一定会感受到两者编译速度的差异,尤其是对于 wxWidgets这样头文件内容多的软件。Microsoft? Visual C++? 能够有很高编译效率的原因是其支持“预编译头文件”(Pre-Compiled Header, PCH)。当使用 Microsoft? Visual C++? 建立项转载 2011-04-19 10:46:00 · 13505 阅读 · 0 评论 -
警惕UNIX下的LD_PRELOAD环境变量
<br />警惕UNIX下的LD_PRELOAD环境变量<br /> <br />陈皓<br /> <br />前言<br /> <br /> 也许这个话题并不新鲜,因为LD_PRELOAD所产生的问题由来已久。不过,在这里,我还是想讨论一下这个环境变量。因为这个环境变量所带来的安全问题非常严重,值得所有的Unix下的程序员的注意。<br /> <br />在开始讲述为什么要当心LD_PRELOAD环境变量之前,请让我先说明一下程序的链接。所谓链接,也就是说编译器找到程序中所引用的函数或全局转载 2011-06-01 11:17:00 · 561 阅读 · 0 评论 -
警惕UNIX下的LD_PRELOAD环境变量
<br />陈皓<br /> <br />前言<br /> <br /> 也许这个话题并不新鲜,因为LD_PRELOAD所产生的问题由来已久。不过,在这里,我还是想讨论一下这个环境变量。因为这个环境变量所带来的安全问题非常严重,值得所有的Unix下的程序员的注意。<br /> <br />在开始讲述为什么要当心LD_PRELOAD环境变量之前,请让我先说明一下程序的链接。所谓链接,也就是说编译器找到程序中所引用的函数或全局变量所存在的位置。一般来说,程序的链接分为静态链接和动态链接,静态转载 2010-11-10 17:59:00 · 769 阅读 · 0 评论 -
Rational Purify 使用及分析实例
简介本文介绍了IBM Rational Purify的基本概念和在不同操作系统中使用Purify对C/C++源程序中存在的内存问题进行勘察和分析,并且提供了有关的实例以便读者在实际操作中作为参考。回页首1.内存问题的原因及分类在C/C++程序中,有关内存使用的问题是最难发现和解决的。这些问题可能导致程序莫名其妙地停止、崩溃,或者不断消耗内存直至资源耗尽。由于C/C++语言本身的特质和历史原因,程序员使用内存需要注意的事项较多,而且语言本身也不提供类似Java的垃圾清理机制。编程人员使用一定的工具来查转载 2010-10-25 18:23:00 · 958 阅读 · 0 评论 -
Linux上对内存泄露的测试
http://www.ibm.com/developerworks/cn/linux/l-cn-memleak/ 介绍了基本的测试类型和原理 http://blog.youkuaiyun.com/rufeng18/archive/2008/11/17/3322099.aspxhttp://www.ibm.com/developerworks/cn/linux/l-pow-debug/http:转载 2010-04-28 17:57:00 · 885 阅读 · 0 评论 -
linux网站收集
http://fairyfish.net/2008/10/17/featured-liunx-programming-books/ linux编程经典书籍推荐原创 2009-07-01 10:34:00 · 592 阅读 · 0 评论 -
[转帖]GNU C __attribute__ 机制简介
摘要:在学习linux内核代码及一些开源软件的源码(如:DirectFB),经常可以看到有关__attribute__的相关使用。本文结合自己的学习经历,较为详细的介绍了__attribute__相关语法及其使用。---------------------------------------------------------声明: 此文为原创,欢迎转载,转载请保留如下信息转载 2009-05-22 13:46:00 · 807 阅读 · 0 评论 -
关于Linux IPC的一个系列的文章
原帖发表在IBM的developerworks网站上,是一个系列的文章,作者郑彦兴,通过讲解和例子演示了Linux中几种IPC的使用方式,我觉得很好,在这里做一个保留,能看完的话Linux IPC的基础是没有问题的了。一)Linux环境进程间通信(一)管道及有名管道http://www.ibm.com/developerworks/cn/linux/l-ipc/part1/转载 2008-10-24 14:05:00 · 1019 阅读 · 0 评论 -
使用 watchdog 构建高可用性的 Linux 系统及应用
使用 watchdog 构建高可用性的 Linux 系统及应用周 婷 (moting9@gmail.com), 软件工程师, IBM 中国系统技术实验室简介: Linux 在不同领域如电信、终端便携设备等得到广泛应用,不同领域的应用对 Linux系统也提出相应的需求。Carrier Grade Linux 是 OSDL(Open Source Devel转载 2012-05-08 14:49:34 · 893 阅读 · 0 评论