linux应用程序开发
文章平均质量分 92
砖头他爸
这个作者很懒,什么都没留下…
展开
-
linux 信号量的使用
semget() 可以使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集:系统调用:semget();原型:intsemget(key_t key,int nsems,int semflg);返回值:如果成功,则返回信号量集的IPC标识符。如果失败,则返回-1:errno=EACCESS(没有权限)EEXIST(信号量集已经存在,无转载 2013-07-09 10:30:21 · 804 阅读 · 0 评论 -
udp socket的简单例子
客户端代码 client.c#include #include #include #include int main(int argc, char **argv){ int sockfd; struct sockaddr_in servaddr; sockfd = socket(PF_INET, SOCK_DGRAM, 0);转载 2014-03-21 14:07:14 · 974 阅读 · 0 评论 -
Linux下大量FIN_WAIT2 & TIME_WAIT 处理办法
当连接数多时,经常出现大量FIN_WAIT1,可以修改 /etc/sysctl.conf修改net.ipv4.tcp_fin_timeout = 10net.ipv4.tcp_keepalive_time = 30net.ipv4.tcp_window_scaling = 0net.ipv4.tcp_sack = 0然后:/sbin/sysctl -p转载 2014-03-26 14:02:21 · 3685 阅读 · 0 评论 -
linux calltrace原理分析
本文介绍了在Linux环境下根据EABI标准进行call trace调试的一般性原理。本文所说的call trace是指程序出问题时能把当前的函数调用栈打印出来。本文只介绍了得到函数调用栈的一般性原理,没有涉及Linux的core dump机制。下面简单介绍powerpc环境中如何实现call trace。内核态call trace内核态有三种出错情况,分别是bug,转载 2014-05-12 11:19:52 · 2128 阅读 · 0 评论 -
解读 nginx 中 chain 和 buf
在写 nginx 的 filter 模块时候需要比较深入去了解chain 和 buf的一些细节以及数据流处理过程。就结构而言,这两个结构不算复杂struct ngx_chain_s { ngx_buf_t *buf; ngx_chain_t *next;}; struct ngx_buf_s { u_char转载 2014-09-04 14:51:55 · 679 阅读 · 0 评论 -
epoll使用
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且转载 2014-08-20 10:45:57 · 427 阅读 · 0 评论 -
Memcache是什么
Memcache是什么Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。Memcache官方网站:http转载 2014-09-09 10:48:12 · 524 阅读 · 0 评论 -
send函数返回值
[cpp] view plaincopyint ret = this->peer().send_n(ack_msg, len, &time_zero_); switch (ret) { case 0: // peer closed re转载 2014-09-24 11:06:20 · 9713 阅读 · 2 评论 -
nginx memcached模块解析
主要介绍了nginx的memcached模块,及其源码解析。原创 2014-09-15 16:28:18 · 1557 阅读 · 0 评论 -
setsockopt()用法(参数详细说明)
int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen);s(套接字): 指向一个打开的套接口描述字level:(级别): 指定选项代码的类型。SOL_SOCKET: 基本套接口IPPROTO_IP: IPv4套接口IPPROTO_IPV6: IPv6套接转载 2014-09-17 11:18:11 · 549 阅读 · 0 评论 -
Linux多线程编程实例解析
Linux系统下的多线程遵循POSIX线程接口,称为 pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。顺便说一下,Linux 下pthread的实现是通过系统调用clone()来实现的。clone()是 Linux所特有的系统调用,它的使用方式类似fork,关于clone()的详细情况,有兴趣的读者可以去查看有关文档说明。下转载 2015-03-27 11:02:09 · 430 阅读 · 0 评论 -
pthread_join函数及linux线程
是从网上搜索到的,为了方便以后查询,所以就把它拿到自己的空间里来了。谢谢原作者!!^^ pthread_join函数及linux线程pthread_join使一个线程等待另一个线程结束。 代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束转载 2015-03-27 14:04:50 · 437 阅读 · 0 评论 -
pthread_barrier_init,pthread_barrier_wait简介
pthread_barrier 系列函数在中定义,用于多线程的同步,它包含三个函数: --pthread_barrier_init() --pthread_barrier_wait() --pthread_barrier_destroy()那么pthread_barrier_*是用来做什么的?这三个函数又怎么配合使用呢?转载 2015-03-27 15:54:14 · 769 阅读 · 0 评论 -
pthread_cond_wait()函数的理解
pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t*mutex)函数传入的参数mutex用于保护条件,因为我们在调用pthread_cond_wait时,如果条件不成立我们就进入阻塞,但是进入阻塞这个期间,如果条件变量改变了的话,那我们就漏掉了这个条件。因为这个线程还没有放到等待队列上,所以调用pthread_cond_wait前转载 2015-04-02 13:56:52 · 503 阅读 · 0 评论 -
linux tcp socket简单例子
客户端代码 client.c#include #include #include #include int main(int argc, char **argv){ int sockfd; struct sockaddr_in servaddr; sockfd = socket(PF_INET, SOCK_STREAM, 0);转载 2014-03-19 16:41:00 · 566 阅读 · 0 评论 -
【Linux学习】pthread_create主线程与创建的新线程之间退出关系
我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下。 1、 主线程等待新线程先结束退出,主线程后退出。正常执行。实例代码:[cpp] view plaincopyprint?#include "apue.h" #include pthread_转载 2014-03-28 17:25:30 · 666 阅读 · 0 评论 -
使用mmap进行进程间内存共享
共 享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空 间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。 采用共享内存通信的一个显而易 见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对转载 2013-07-11 14:15:20 · 1262 阅读 · 0 评论 -
objdump的使用
objdump是gcc工具,用来查看编译后目标文件的组成。常用命令:objdump -x obj:以某种分类信息的形式把目标文件的数据组成输出;objdump -t obj:输出目标文件的符号表()objdump -h obj:输出目标文件的所有段概括()objdump -j ./text/.data -S obj:输出指定段的信息(反汇编源代码)objdump -S ob转载 2013-07-15 14:09:34 · 864 阅读 · 0 评论 -
linux信号signal处理机制
转自 http://www.cnblogs.com/taobataoma/archive/2007/08/30/875743.html信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,转载 2013-07-17 16:48:39 · 718 阅读 · 0 评论 -
linux守护进程的编程实现
Linux 守护进程的编程方法 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本转载 2013-07-22 15:40:37 · 593 阅读 · 0 评论 -
提高代码性能及并发性的方法浅谈
最近在做系统调优,总结了下cache相关知识,以及如何提高性能和并发性能的方法。原创 2013-07-24 15:38:25 · 1520 阅读 · 0 评论 -
线程的创建和等待
所有线程都有一个线程号,也就是Thread ID。其类型为pthread_t。通过调用pthread_self()函数可以获得自身的线程号。下面说一下如何创建一个线程。通过创建线程,线程将会执行一个线程函数,该线程格式必须按照下面来声明:void * Thread_Function(void *)创建线程的函数如下:int pthread_create(pthread_t转载 2013-08-28 11:09:48 · 748 阅读 · 0 评论 -
共享库的编译及使用
linux下的库有两种:静态库和共享库。共享库,一般也被称为动态链接库。 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大,一般以libxxxx.a形式存在。 共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小,一般以libxxxx.so的文件形式存在。 库是别人写好的现有的,成熟的,可以复用的代码。实际项转载 2013-07-05 14:22:13 · 1131 阅读 · 0 评论 -
GDB attach 进程
gdb attach使用原创 2013-09-22 13:57:03 · 1330 阅读 · 0 评论 -
GDB常用命令简介[zz]
GDB常用命令简介[zz]GDB的命令很多,本文不会全部介绍,仅会介绍一些最常用的。在介绍之前,先介绍GDB中的一个非常有用的功能:补齐功能。它就如同Linux下 SHELL中的命令补齐一样。当你输入一个命令的前几个字符,然后输入TAB键,如果没有其它命令的前几个字符与此相同,SHELL将补齐此命令。如果有其它命令的前几个字符与此相同,你会听到一声警告声,再输入TAB键,SHELL将所有前转载 2013-09-27 17:31:00 · 754 阅读 · 0 评论 -
各个errno对应的意义
本文转自:http://blog.csdn.net/kofiory/article/details/5790409strerror(errno):获取errno对应的错误perror(),可以打印出当前errno所对应的错误字符串。/****************************获取错误代码描述**************/#include string.h>转载 2014-02-27 17:39:01 · 1129 阅读 · 0 评论 -
进程组/线程组/会话
可以参看UNIX环境高级编程的相关章节。为了搞清楚进程组之间的关系,我们做如下的实验:编写程序:[cpp] view plaincopy/*test.c*/ #include "../include/apue.h" void main() { pid_t pid; char *args[转载 2014-03-12 17:34:03 · 772 阅读 · 0 评论 -
【C/C++】Linux下使用system()函数一定要谨慎
曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。当初因为这个函数风险较多,故抛弃不用,改用其他的方法。这里先不说我用了什么方法,这里必须要搞懂system()函数,因为还是有很多人用了system()函数,有时你不得不面对它转载 2014-03-09 17:31:04 · 712 阅读 · 0 评论 -
【C/C++】Linux下system()函数引发的错误
今天,一个运行了近一年的程序突然挂掉了,问题定位到是system()函数出的问题,关于该函数的简单使用在我上篇文章做过介绍: http://my.oschina.net/renhc/blog/53580先看一下问题简单封装了一下system()函数:1int pox_system(const char *cmd_line)转载 2014-03-09 17:32:59 · 868 阅读 · 0 评论 -
编译选项-l,-L,-I
参考文章;http://hi.baidu.com/njuhappy/item/83f8bfbd7c5d3162bb0e1237我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:例:gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -转载 2015-04-17 15:01:51 · 931 阅读 · 0 评论