
linux-C
文章平均质量分 61
taolinke
这个作者很懒,什么都没留下…
展开
-
在应用程序中替换Linux中Glibc的malloc的四种方法
打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc、realloc、calloc和free的地方到处都是,如果自己写好的接口需要重命名所有的调用,先不说工作量,部分没有权限查看代码的.a文件就搞不定了。所以需要替换掉系统的malloc,保证原有调用的名称不变。经过尝试,共有四种方法可以替转载 2011-06-16 10:07:00 · 913 阅读 · 0 评论 -
makefile进入子文件夹执行make
写了一个文件夹比较多的程序,在写主Makefile的时候,需要进入子文件夹执行make,在这里记录下,自己运行成功的Makefile。SUBDIRS=directory1 directory2 directory3RECURSIVE_MAKE= @for subdir in $原创 2011-07-22 16:42:03 · 13635 阅读 · 0 评论 -
linux串口通信中设置软件控制输入流的开始和结束
首先,如果我们不是开发串口driver的,而只是用串口来传入自己定义格式的数据,然后根据得到的数据做相关的解释,我们需要设置这些, options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/ options.c原创 2011-07-12 12:16:16 · 2448 阅读 · 0 评论 -
gcc跨版本编译出现“浮点数例外”错误解决办法
项目中遇到的问题,我的开发环境的gcc是4.1.2,而目标机器的gcc版本是3.2.2,而且libc的版本不同,我的是2.5,目标是2.3.2。问题是,在我的机器上编译出来的动态库和可执行程序,到目标机器,会报错,”浮点数例外“,在网上搜索了一会,发现了问题的原因。原因是glib原创 2011-07-12 15:25:05 · 8114 阅读 · 1 评论 -
动态库加载出错,cannot restore segment prot after reloc: Permission denied以及为何编译动态库需要-fPIC
项目中碰到的问题,编译好的so文件,放到其他机器上去加载,报了错误,cannot restore segment prot after reloc: Permission denied。网上查了一下,原因是selinux的问题,selinux的设置太过严格导致的。解决的办法是在r原创 2011-07-24 13:43:28 · 15112 阅读 · 3 评论 -
IO模式设置网络编程常见问题总结—IO模式设置,阻塞与非阻塞的比较
转载自:houlaizhe211非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明: 基本概念: 阻塞IO::转载 2011-08-10 15:16:36 · 609 阅读 · 0 评论 -
使用mmap实现文件的拷贝
原文地址:点击打开链接今天看csapp看到了虚拟存储器的映射以及mmap函数的用法,作为练习,使用mmap来实现文件的拷贝操作,同时与传统的文件拷贝操作进行了性能比较。mmap与munmap函数介绍:#include #include void *mmap(v转载 2011-09-09 14:53:57 · 1502 阅读 · 0 评论 -
实用方便解决error while loading shared libraries办法,及linux gcc 下使用总结
linux gcc 下使用总结转自:点击打开链接我们在linux下编译程序需要用到自己的动态库时,有时会碰到这个问题,error while loading shared libraries。本质原因就是链接器在默认的lib库中找不到我们所需要的动态库,网上有很多解决办法转载 2011-09-08 16:01:33 · 1946 阅读 · 0 评论 -
Pthreads并行编程之spin lock与mutex性能对比分析
原文地址:http://www.parallellabs.com/2010/01/31/pthreads-programming-spin-lock-vs-mutex-performance-analysis/Pthreads提供的Mutex锁操作相关的API主要有:pt转载 2011-09-09 14:38:48 · 717 阅读 · 0 评论 -
线程安全与可重入
定义 线程安全:被多个并发的线程反复调用时,他会产生正确的结果。 可重入:当被多个线程调用的时候,不会引用任何共享数据。 Remark:任何线程不安全问题的根源都是“共享数据”。所以,不使用任何共享数据的函数(即:可重入函数)肯定是线程安全的。但这并不等于说,线程安全函数就转载 2011-07-11 14:46:56 · 620 阅读 · 0 评论 -
valgrind安装过程中无法定位libmpi.a中lam_mpi_commworld错误的解决办法。
问题描述:安装valgrind 时,./configure成功后,make时提示错误/usr/bin/ld: /usr/lib64/libmpi.a(laminit.o): relocation R_X86_64_32S against `lam_mpi_comm_world can not be used when making a shared object; reco转载 2011-06-16 10:01:00 · 941 阅读 · 0 评论 -
linux下调试内存泄露的工具Valgrind
ValgrindValgrind 已经在 Linux 应用程序开发社区中广泛用来调试应用程序。它尤其擅长发现内存管理的问题。它可以检查程序运行时的内存泄漏问题。这个工具目前正由 Julian Seward 进行开发,并由 Paul Mackerras 移植到了 Power 架构上。要安装 Valgrind,请从 Valgrind 的 Web 站点上下载源代码(参阅 参考资料转载 2011-06-16 12:07:00 · 696 阅读 · 0 评论 -
linux下多线程和信号
说实话,信号是我讨厌的东西,在我些的代码中,我都想用最简单的办法来处理它,现在遇到多线程中信号的处理,APUE中的说法也看得不是很懂,优快云中一位朋友有如下的总结,先记在这里。1. 默认情况下,信号将由主进程接收处理,就算信号处理函数是由子线程注册的 2. 每个线程均有自己的信号屏蔽字,可以使用sigprocmask函数来屏蔽某个线程对该信号的响应处理,仅留下需要处理该信号的线程来处理指定的信号。 3. 对某个信号处理函数,以程序执行时最后一次注册的处理函数为准,即在所有的线程里,同一个信号在任何线程里对转载 2011-04-25 11:59:00 · 1502 阅读 · 0 评论 -
没有atomic.h后如何在linux实现原子操作
2010-12-30更新今天同事告诉我说有个/usr/include/alsa/iatomic.h,也能实现原子操作,使用的时候#include就可以了,原有的atomic系列函数这里都有,不过我还没试过。-------------------------------正文--------------------------------------- 在Linux2.6.18转载 2011-06-16 09:57:00 · 2206 阅读 · 0 评论 -
因为dwarf2_read_address: Corrupted DWARF expression而升级GDB,附升级教程
转自:http://blog.youkuaiyun.com/littlefang/archive/2010/10/28/5971024.aspx 原有的代码做了部分修改,再调试的时,p某个变量出现"dwarf2_read_address: Corrupted DWARF expression"错误,在网上搜了一下,是由于gdb的bug导致的,该bug已在GDB 6.7及以上版本修复。测试服务器转载 2011-06-15 16:54:00 · 1816 阅读 · 0 评论 -
volatile关键字和原子操作的区别
************************定义*******************************volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以死代码消除。但有时这些优化不是程序所需要的,这时可以用volatile关键字禁止做这些优化,vol转载 2011-06-16 09:14:00 · 601 阅读 · 0 评论 -
gdb调试时局部变量不可查看问题
调试程序时,在gdb内p var,会提示No symbol "var" in current context.即使没有使用任何编译优化选项,仍然不能查看,放狗搜了一下,可能是这些变量被优化到寄存器中,gdb无法读取。解决方案:在编译是加入 ‘-gstabs+’ 选项,比如:g++ -g -Wall -gstabs+ -o main.o main.cppgdb main,转载 2011-06-16 09:56:00 · 5226 阅读 · 0 评论 -
gdb中调试signal信号
原发贴者 Couger,备查。在console下按Ctrl-C后确实发送了SIGINT信号,但是gdb里的缺省设置将会导致由GDB截获的该信息,调试的应用程序无法接受到该信号。 有两种方法可以使调试的应用程序接受到信号: (1)改变gdb信号处理的设置 比如,以下设置会告诉gdb在接收到SIGINT时不要停止、打印出来、传递给调试目标程序 =====转载 2011-06-16 10:01:00 · 1007 阅读 · 0 评论 -
pthread_create会导致内存泄露
这几天一直在调试一个系统,系统的功能就是定时发送数据、接收数据然后解析收到的数据,转换成一定的格式存入数据库中。我为了并发操作,所以每接收到一个数据包,就调用pthread_create函数创建一个默认属性的线程进行处理。 系统一开始运行很正常,但是当接收到第299个数转载 2011-08-11 15:03:20 · 1342 阅读 · 0 评论 -
如何解决TIME_WAIT过多的解决办法(附Socket中的TIME_WAIT状态详解)
转载自:xzhijunlinux和windows下TIME_WAIT过多的解决办法如果使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链接的方式和后端交互的原因,使得nginx和后端的ESTABLISHED变得转载 2011-08-11 15:22:27 · 2497 阅读 · 0 评论 -
linux 客户端 Socket 非阻塞connect getsockopt不可用
转载自:点击打开链接开发测试环境:虚拟机CentOS,windows网络调试助手 非阻塞模式有3种用途 1.三次握手同时做其他的处理。connect要花一个往返时间完成,从几毫秒的局域网到几百毫秒或几秒的广域网。这段时间可能有一些其他的转载 2011-08-12 10:22:36 · 8380 阅读 · 0 评论 -
基于管道的popen和pclose函数
转载自:http://my.oschina.net/renhc/blog/35116标准I/O函数库提供了popen函数,它启动另外一个进程去执行一个shell命令行。这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程。popen函数还创建一个管道用于父子进程间通信。子进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数。下转载 2012-10-10 17:33:44 · 1645 阅读 · 0 评论 -
close和shutdown以及SO_LINGER的联系
以下有部分摘自《unix网络编程》clsoe将描述字的访问计数器减1,仅在此计数为0的时候才,激发TCP的正常连接终止序列,并且关闭套接口。用shutdown我们可以激发TCP的正常连接终止序列,而不管访问计数。而close的操作依赖于套接口选项SO_LINGER的值,具体如下:SO_LINGER选项用来改变此缺省设置。使用如下结构:struct linger原创 2012-03-02 15:14:37 · 1566 阅读 · 0 评论 -
linux 下根据进程名字获取进程的进程号PID,类似pidof,C函数
linux有一个命令行工具叫做pidof,可以根据用户输入的进程名字查找到进程号,但有时候我们需要在程序里实现,不想调用system,在查阅了很多版本的pidof源代码后,没有发现一个自己感觉比较好的,所以就参照linux上的pidof的源代码,改写出了一版,供大家参考使用。/*********************************************************原创 2012-12-18 17:45:09 · 22470 阅读 · 2 评论 -
vim中vimrc里taglist的设置
一般是这样设置的,在vimrc最后添加let Tlist_Auto_Open=1 "自动打开taglistlet Tlist_Exit_OnlyWindow=1 "当taglist是最后一个窗口时关闭let Tlist_File_Fold_Auto_Close=1 "当taglist显示多个文件时,只显示当前的,其他的都折叠起来原创 2013-04-07 22:16:56 · 1284 阅读 · 0 评论 -
unixodbc的insert中文乱码问题的解决方法
问题描述:达人们,帮忙诊断下是什么问题环境: 服务端:CentOs5.5 + oracle 10.2.1, 数据库的字符集为: NLS_LANG=AMERICAN_AMERICA.AL32UTF8客户端: CentOs5.5 + oracle client 10.2.0 + unixODBC2.3.0, 环境变量为: NLS_LANG=AMERICAN_AMERICA.AL3原创 2013-07-07 16:42:21 · 5316 阅读 · 0 评论 -
进程名字获取进程的进程号PID,类似pidof,C函数,适合linux,AIX和hp-unix平台
之前写过一篇文章,linux下根据进程名字获取进程号,但是只能在linux下使用,这次更新一版,适合linux,AIX和hp-unix平台。其实原理很简单,就是利用了ps命令,前段时间更新blog比较慢,工作忙..../**************************************************************************** File n原创 2013-09-08 13:09:09 · 5333 阅读 · 0 评论 -
根据linux内核源码查找recv返回EBADF(errno 9)的原因
详细分析了linux内核2.6.18下的系统调用recv返回errno: 9(EBADF)这个错误码的详细原因。原创 2013-10-31 17:54:05 · 22250 阅读 · 0 评论 -
Linux下使用system()函数一定要谨慎
转载自:http://my.oschina.net/renhc/blog/53580曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。当初因为这个函数风险较多,故抛弃不用,改用其他的方法。这里先不说我用了什么方法,这里必须转载 2012-10-10 17:31:39 · 1528 阅读 · 0 评论 -
Linux下system()函数返错,errno是ECHILD
转载自:http://my.oschina.net/renhc/blog/54582今天,一个运行了近一年的程序突然挂掉了,问题定位到是system()函数出的问题,关于该函数的简单使用在我上篇文章做过介绍: http://my.oschina.net/renhc/blog/53580 先看一下问题简单封装了一下system()函数:int pox_system转载 2012-10-10 17:15:25 · 11187 阅读 · 1 评论 -
linux下多线程编程的几篇不错的博文
1. 多线程服务器的常用编程模型2. 多线程服务器的适用场合3. 并发编程的 15 条建议(译)4. C++ 多线程系统编程精要选自陈硕的blog : http://blog.youkuaiyun.com/solstice转载 2011-09-09 15:56:37 · 594 阅读 · 0 评论 -
使用 GDB 调试多进程程序
文章内容在点击打开链接set follow-fork-mode [parent|child] parent: fork之后继续调试父进程,子进程不受影响。child: fork之后调试子进程,父进程不受影响。set detach-on-fork [on转载 2011-08-18 18:04:33 · 690 阅读 · 0 评论 -
malloc(0)返回什么地址?
转载自:点击打开链接问题内容:malloc(0)返回什么地址? 原讨论链接:http://community.youkuaiyun.com/expert/topicview1.asp?id=4351400所属论坛:C语言 审核组:C/C++提问者:jidahyx解转载 2011-08-22 11:14:56 · 1356 阅读 · 0 评论 -
mmap介绍
mmap函数是unix/linux下的系统调用,来看《Unix Netword programming》卷二12.2节对mmap的介绍:The mmap function maps either a file or a Posix shared memory object i转载 2011-09-20 14:21:58 · 540 阅读 · 0 评论 -
fread读取文件读不全的问题解决
问题大概是这样的,用fread读取文件的时候,读取到的长度很小,并没有到预期值。原因是打开文件的时候用"r"模式,应该成"rb"模式。代码示例如下#include int main(){ unsigned char buff[201]; int i;原创 2011-08-25 12:03:39 · 4480 阅读 · 2 评论 -
linux中内核的一个不错的参数somaxconn
转载自:点击打开链接 在linux中,/proc/sys/net/core/somaxconn这个参数,linux中内核的一个不错的参数somaxconn 看下其解析: 对于一个TCP连接,Server与Client需要通过三次握手来建立网络转载 2011-09-22 16:15:11 · 65794 阅读 · 2 评论 -
使用setsockopt来控制connect超时
转载自: 点击打开链接原来我们实现connect()超时基本上都使用unix网络编程一书的非阻塞方式(connect_nonb),今天在网上看到一篇文章,觉得很有意思,转载如下: 读Linux内核源码的时候偶然发现其connect的超时参数竟然和用SO_SNDTI转载 2011-09-28 16:26:49 · 1421 阅读 · 0 评论 -
dbx调试工具,下面介绍一些常用的命令
1. 执行dbx$dbx 可执行文件名可执行文件在编译的时候必须代上 –g 参数2. 显示代码(dbx)list //从文件开头列出代码(dbx)list n //列出第n行代码(dbx)list m,n转载 2012-04-01 14:38:26 · 1412 阅读 · 0 评论 -
aix的cc打开警告,就像在linux下面gcc的Wall
<br /> 原先一直在linux下开发c,gcc的警告选项 -Wall很好用,这次到了aix下,aix是64位的,而且是vac下面的cc,是没有-Wall这个选项的。<br />百度,google了好几遍,不是没有讲这个编译选项的,就是不全。功夫不负有心人,最后终于在犄角旮旯里找到了,哈哈。<br /> 特此写下,算是自己的备忘,也分享出来,给需要的人使用。<br /> 正确的在aix下cc,想要linux下gcc的-Wall效果的编译选项是:-qinfo=all:noppt:noppc原创 2011-04-19 11:09:00 · 1740 阅读 · 0 评论 -
求x的n次方和stdarg用法
int foo ( int x , int n){int val;val =1;if (n>0) {if (n%2 == 1) val = val *x;val = val * foo(x*x , n/2);}return val;} #includeint ripple ( int , ...);main(){int n原创 2009-08-18 14:01:00 · 965 阅读 · 0 评论