linux/unix
文章平均质量分 54
江东橘子
这个作者很懒,什么都没留下…
展开
-
sigterm sigint sigkill 区别
我看网上应该有不少搜索这个区别的问题,但是回答的都不全面,其中sigterm与sigint尤其有一点区别比较重要,但大都没有提及,今天我就遇到了这个问题,纠结了20分钟才搞明白咋回事。 首先,对于说这几个信号都是终止程序运行的说法不太准确,因为程序收到信号后,如果不对信号处理,就会导致程序退出,但如果程序捕获信号进行处理,按照它的逻辑,它是不一定会退出的。 在这三个信号中,sigkill是不能被捕获的,程序收到这个信号后,一定会退出。这就是kill -9一定能保证将程序杀死的原因。 下面说一下sigterm转载 2011-06-01 15:40:00 · 2266 阅读 · 0 评论 -
EPOLL的工作模式 ET and LT
近日又继续学习了一下EPOLL的工作模式,这会基本上搞清楚了,因而撰写了此篇文档进行描述。先来一段网上的介绍文档:EPOLL事件分发系统可以运转在两种模式下:Edge Triggered (ET)、Level Triggered (LT)。LT是缺省的工作方式,并且同时支持block和no-block socket;在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行I原创 2011-06-21 14:28:00 · 530 阅读 · 0 评论 -
epoll_data_t里面的void *ptr; int fd; u32; u64 分析
首先注意这是一个联合体。真正使用起来,事实上第一个就足够了,也就是void *,后面三个都可以用这个给“包装”起来,因为void * 是c里头的“泛型”。楼主不妨思考为什么会这么设计。以网络编程为例,当设计处理数据包的回调函数的时候,通常你面对的数据类型都是不确定的,依赖于数据包的结构。如果让你来设计epoll_data_t,你会怎么设计???三思~~如果我设计的话,直接一个void *搞定,就如原创 2011-06-27 18:35:00 · 6257 阅读 · 0 评论 -
Linux下高性能网络编程中的几个TCP/IP选项
Linux下高性能网络编程中的几个TCP/IP选项 转自:http://blog.chinaunix.net/u/12592/showart.php?id=2064847最近在新的平台上测试程序,以前一些没有注意到的问题都成为了性能瓶颈,通过设置一些TCP/IP选项能够解决一部分问题,当然根本的解决方法是重构代码,重新设计服务器框架。先列出几个TCP/IP选项:选项man 7 sock原创 2011-06-26 21:21:00 · 817 阅读 · 0 评论 -
INADDR_ANY的理解
INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。 一般来说,在各个系统中均定义成为0值。例如MontiVista Linux中在/usr/inc原创 2011-07-05 15:40:20 · 875 阅读 · 0 评论 -
TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子)
TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子) 每个文件或套接口都有一个访问计数,该访问计数在文件表项中维护,它表示当前指向该文件或套接口的打开的描述字个数。 每个文件,套接口都有一个访问计数器,表示当前指向该文件或套接口的打开的原创 2011-07-05 14:28:44 · 486 阅读 · 0 评论 -
慢系统调用
对于那些可能永远阻塞的函数,我们可以称之为慢系统调用,多数网络支持的函数都属于这一类,如上列的这些函数,比如没有客户连接到服务器,那么服务器对与accept的返回没有保证。 应用在这的一个规则是,当一进程阻塞于一个慢系统调用,可能捕获到一个信号,等待信号处理程序返回时,系原创 2011-07-06 22:26:48 · 1472 阅读 · 0 评论 -
pthread_cond_singal condition
#include #include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /*初始化互斥锁*/pthread_cond_t cond = P原创 2011-08-02 15:42:31 · 559 阅读 · 0 评论 -
gdb debug memory address
可以使用examine命令(简写是x)来查看内存地址中的值。x命 令的语 法如下所示:x/ n、f、u是可选的参数。n是一个正整数,表示需要显示的内存单元的个数, 也就是说从当前地址向后显示几个 内存单元的内容,一个内存单元的大小由后面的u定义。f 表示显原创 2011-08-10 11:13:20 · 1114 阅读 · 0 评论 -
goto VS longjmp setjmp
setjmp和longjmp的使用 setjmp与logjmp包含在头文件/usr/include/setjmp.h中,使用前应在程序头部加入#include 。setjmp与longjmp结合使用时,它们必须有严格的先后执行顺序,也即转载 2011-08-10 18:56:34 · 471 阅读 · 0 评论 -
linux 命令访问url: curl http://www.baidu.com/index.html
1.elinks - lynx-like替代角色模式WWW的浏览器例如: elinks --dump http://www.baidu.com2.wget 这个会将访问的首页下载到本地[root@el5-mq2 ~]# wget http://www.baidu.com--2011-10-17 16:30:10-- http://www.baidu.com/原创 2018-01-21 13:07:01 · 21415 阅读 · 0 评论 -
undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status
[root@localhost dss]# gcc -o abc abc.cpp/tmp/ccY3hmyr.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0collect2: ld returned 1 exit status[root@localhost dss]# gcc -o abc abc.cpp原创 2011-06-16 14:17:00 · 3514 阅读 · 0 评论 -
linux动态线程池--原理,这儿的代码不完整
本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有原创 2011-06-16 15:38:00 · 2007 阅读 · 0 评论 -
volatile 和 sig_atomic_tlinux
volatile 和 sig_atomic_tlinux相关 2008-10-07 12:58:56 阅读39 评论0 字号:大中小 订阅 volatile 和 sig_atomic_tvolatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,每次使用时都需要去内存里重新读取它的值,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编原创 2011-06-02 17:01:00 · 568 阅读 · 0 评论 -
sigsuspend的理解
/* sigsuspend的使用 sigprocmask和pause连起来用可以实现sigsuspend的功能;但是还是使用sigsuspend函数,应为sigsuspend是原子操作 */ #include #include #include #include volatile sig_atomic_t quitflag; static void sig_handler(int sign原创 2011-06-03 13:38:00 · 2532 阅读 · 0 评论 -
一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队
任何时候,一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队,只被简单的丢弃:理解--即使连续发送SIGQUIT信号,进程也只有处理一个SIGQUIT信号。 Please read the picture; It is screen shot from book"Linux kernal"原创 2011-06-03 15:47:00 · 507 阅读 · 0 评论 -
sigprocmask理解
/*int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); 功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)。 用法: #include int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); 参数: how:用于指定信号修改的方式,可能原创 2011-06-03 13:37:00 · 771 阅读 · 0 评论 -
linux 读书笔记
1:管道:×管道可以在同组进程通讯。如果要在不同组进程间用管道通讯,那么要用FIFO。 --数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 --如果没有读进程,那么管道的写操作就会失败 --管道写端和读端的声明:int pipe_fd[2]; pipe()的调用必须在fork之前 --管道的读是在文件的原创 2011-06-09 10:41:00 · 362 阅读 · 0 评论 -
linux 读书笔记
1:管道:×管道可以在同组进程通讯。如果要在不同组进程间用管道通讯,那么要用FIFO。 --数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 --如果没有读进程,那么管道的写操作就会失败 --管道写端和读端的声明:int pipe_fd[2]; pipe()的调用必须在fork之前 --管道的读是在文件的原创 2011-06-09 10:42:00 · 396 阅读 · 0 评论 -
linux 读书笔记
1:管道:×管道可以在同组进程通讯。如果要在不同组进程间用管道通讯,那么要用FIFO。 --数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 --如果没有读进程,那么管道的写操作就会失败 --管道写端和读端的声明:int pipe_fd[2]; pipe()的调用必须在fork之前 --管道的读是在文件的原创 2011-06-09 10:42:00 · 325 阅读 · 0 评论 -
Linux线程池
/*解析:这段代码创建了三个线程,10个任务。线程池的结构是CThread_pool,任务的结构是worker,他们都是一个连表。 程序先用pool_init创建拉三个线程。然后每个线程执行函数thread_routine。thread_routine在运行到pthread_cond_wait(&(pool->queue_ready),&(pool->queue_lock));时,等待共享变量被激原创 2011-06-13 15:59:00 · 837 阅读 · 0 评论 -
Linux线程池
/*解析:这段代码创建了三个线程,10个任务。线程池的结构是CThread_pool,任务的结构是worker,他们都是一个连表。 程序先用pool_init创建拉三个线程。然后每个线程执行函数thread_routine。thread_routine在运行到pthread_cond_wait(&(pool->queue_ready),&(pool->queue_lock));时,等待共享变量被激原创 2011-06-13 15:59:00 · 589 阅读 · 0 评论 -
linux动态线程池--原理,这儿的代码不完整
本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有原创 2011-06-16 15:37:00 · 692 阅读 · 0 评论 -
window远程桌面连接centos7
前提: CentOS安装桌面,如果无桌面,请执行# yum -y groups install "GNOME Desktop"# startx12配置源# yum install epel* -y1安装xrdp# yum --enablerepo=epel -y install xrdp1启动xrdp并设置开机启动# systemctl start xrdp# systemctl enabl...原创 2018-04-03 10:02:19 · 11192 阅读 · 0 评论