linux~
QQ276592716
这个作者很懒,什么都没留下…
展开
-
Linux的分段和分页机制
1.分段机制 80386的两种工作模式 80386的工作模式包括实地址模式和虚地址模式(保护模式)。Linux主要工作在保护模式下。 分段机制 在保护模式下,80386虚地址空间可达16K个段,每段大小可变,最大达4GB。 从逻辑地址到线性地址的转换由80386分段机制管理。段寄存器CS、DS、ES、SS、FS或GS标识一个段。这些段寄存器作为段选择器,用来选择转载 2011-11-05 16:06:03 · 667 阅读 · 0 评论 -
crontab与bash环境变量不一致导致的无法定时执行任务~
一个脚本XX.sh,可以执行。放在crontab里面就无法执行。发现里面有些用到了/usr/local/bin的程序比如memcached是直接写成memcached XX的。因为环境变量不同,所以这样是无法执行的。解决方法。把memcached改成绝对路径形式。原创 2012-04-25 14:51:44 · 1301 阅读 · 0 评论 -
linux监控程序-程序自动重启方法
家在写server的时候,不管server写的是多么健壮,还是经常出现core dump等程序异常退出的,但是一般情况下需要在无人为干预情况下,能够自动重新启动,保证server程序能够服务用户。这时就需要一个监控程序来实现能够让程序自动重新启动,现在笔者在写portmap就遇到了这个问题,通过网上查找资料,找到了一个相对靠谱的exec+fork解决方法。使用脚本实现自动重启首先想到的转载 2012-04-24 10:47:25 · 27296 阅读 · 6 评论 -
unix网络编程-第七章-小结
套接字选项 通用,IPv4,IPV6,TCP和SCTPfcntl函数,因为它是把套接字设置为非阻塞式I/O型或信号驱动式I/O型以及设置套接字属主的POSIX的方法。套接字选项粗分为两大基本类型:一是启用或者禁止某个特性的二元选项,二是取得并返回我们可以设置或检查的特定值的选项。设置或获取选项有时序上的考虑如果想在三路握手完成时确保这些套接字选项中的某一个是给已连接套接字设置的,那原创 2012-07-07 18:01:21 · 831 阅读 · 0 评论 -
unix网络编程-第八章-小结
使用UDP编写的常用应用程序有:DNS,NFS,SNMP写一个长度为0的数据报是可行的。在UDP情况下,这会形成一个只包含一个IP首部和一个8字节UDP首部而没有数据的IP数据报。UDP是无连接的,也就没有关闭UDP之类的事情。对于一个UDP套接字,如果进程首次调用sendto时它没有绑定一个本地端口,那么内核就在此时为它选择一个临时端口。跟TCP一样,客户可以显示的调用bind,很少原创 2012-07-10 02:03:47 · 534 阅读 · 0 评论 -
unix网络编程-第九章-小结
SCTP中的通知使得一个应用程序能够知晓用户数据到达意外的重要协议事件一对多的形式给应用程序开发人员提供这样的能力:编写的服务器程序无需管理大量的套接字描述符。一到多式的套接字上,用于标识单个关联的是一个关联标识。当一个客户关闭其关联时,其服务器也将自动关闭同一个关联,服务器主机内核不再有该关联的状态。可用于致使在四路握手的第三个或第四个分组中捎带用户数据的唯一办法就是使用一对多形原创 2012-07-11 15:19:22 · 659 阅读 · 0 评论 -
unix网络编程-第五章-小结
最近有个记笔记的习惯,很好~通配地址 INADDR_ANY 捆绑通配地址是在告知系统:要是系统是多宿主机,我们将接受目的地址为任何本地接口的连接。POSIX保证被捕获的信号在其信号处理函数运行期间总是阻塞的。SIGALRM通常是为I/O操作设置超时,这种情况下我们希望受阻塞的系统调用被该信号中断掉。POSIX系统的信号处理总结为:(这部分在unix环境高级编程中记得有讲过,可是忘了原创 2012-07-01 22:36:19 · 1084 阅读 · 0 评论 -
unix网络编程-第十章-小结
SCTP中的流不同于TCP中的字节流,它是关联内部具有先后顺序的一个消息序列。SCTP的多流特性能够尽可能地减少头部阻塞。希望在发送完一个应答消息后终止一个连接:1.sctp_sndrcvinfo结构的sinfo_flags字段中设置MSG_EOF2.另一种方法是把MSG_ABORT标志应用于sinfo_flags字段。ABORT块导致的是优雅的中止性关闭让客户知晓服务器退出的原创 2012-07-13 11:31:12 · 581 阅读 · 0 评论 -
unix网络编程-第六章-小结
I/O复用场合:1.当客户处理多个描述符(通常是交互和网络套接字)时,必须使用I/O复用。2.一个客户同时处理多个套接字是可能得。3.如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字。4.如果一个服务器既要处理TCP,又要处理UDP,一般要用I/O复用。5.如果一个服务器要处理多个服务或者协议。I/O复用并非只限于网络编程,许多重要的应用程序也需要使用这项技术。原创 2012-07-02 22:58:49 · 811 阅读 · 0 评论 -
unix网络编程-十二,十三章-小结
12以太网首部中包含的类型字段值为0x0800,它把本以太网帧标识为一个IPv4帧。0x86dd,标识为一个IPv6帧。IPv4模块结合其上的TCP模块检测到IPv4数据报的目的端口对应一个IPv6套接字,于是把该数据报IPv4首部中的源IPv4地址转换成一个等价的IPv4映射的IPv6地址。该连接上其余的数据报同样都是IPv4数据报。一般来说,一个IPv6地址无法表示成一个IPv4地原创 2012-08-06 20:11:27 · 938 阅读 · 0 评论 -
unix网络编程-十五,十六章-小结
15.unix域协议是在单个主机上执行客户/服务器通信的一种方法,所用的API就是在不同主机上执行客户/服务器通信所用的APIunix域套接字通常比通信两端位于同一个主机的TCP套接字快出一倍unix域套接字可用于在同一个主机上的不同进程之间传递描述符unix域套接字较新的实现把客户的凭证(用户ID和组ID)提供给服务器,从而能够提供额外的安全检查措施。socketpair创建原创 2012-08-14 19:34:33 · 632 阅读 · 1 评论 -
unix网络编程-第十一章-小结
出于可靠和冗余的目的,必须要设置多个名字服务器解析器使用UDP向本地名字服务器发出查询。如果答案太长,超出了UDP消息的承载能力,本地名字服务器和解析器会自动切换到TCP。不适用DNS也能获取名字和地址信息,用hosts文件。鼓励用getaddrinfo函数替代gethostbyname有些端口号在TCP上面用一种服务,在UDP上面用完全不同的另一种服务。getaddrinfo原创 2012-08-01 20:13:53 · 620 阅读 · 0 评论 -
互斥锁,条件变量,信号量的一个区别(unix网络编程卷2)
互斥锁是为了上锁而优化的,条件变量是为了等待而优化的,信号量可用于上锁,也可用于等待,因而可能导致更多的开销和更高的复杂性。原创 2013-06-28 22:31:26 · 768 阅读 · 0 评论 -
一个写优先的读写锁实现
/* g++ -Wall -o rwlock rwlock.cpp -lpthread** 一个写优先读写锁的实现,多线程频繁读,多线程少量写,同时写优先,性能极佳。* 当写锁(独占锁)lock成功的必要条件是:* 1. 将写锁计数++;* 2. 会阻塞后续对读锁(共享锁)的读;* 3. 等待读锁的计数为0;* 4. 等待写锁的计数为1;**/#includ转载 2014-02-23 16:28:55 · 1427 阅读 · 0 评论 -
一致代码段,非一致代码段,特权级,代码间跳转
一致代码段,非一致代码段一致位:在描述符属性中TYPE(包含4个二进制位)字段的第2位。当 S=1 时TYPE中的4个二进制位情况:3 2 1 0分别对应下面四个属性执行位 一致位 读写位 访问位执行位:置1时表示可执行,置0时表示不可执行;一致位:置1时表示一致码段,置0时表示非一致码段;读写位:置1时表示可读可写,置0时表示只读;访问位:置1时表示已访问,置0时转载 2012-03-22 20:40:24 · 1474 阅读 · 0 评论 -
Linux 调度器发展简述
引言进程调度是操作系统的核心功能。调度器只是是调度过程中的一部分,进程调度是非常复杂的过程,需要多个系统协同工作完成。本文所关注的仅为调度器,它的主要工作是在所有 RUNNING 进程中选择最合适的一个。作为一个通用操作系统,Linux 调度器将进程分为三类:交互式进程 此类进程有大量的人机交互,因此进程不断地处于睡眠状态,等待用户输入。典型的应用比如编辑器 vi。此类进程对系统响应时转载 2012-04-02 18:17:50 · 521 阅读 · 0 评论 -
弱符号与强符号
弱符号与强符号我们经常在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。比如我们在目标文件A和目标文件B都定义了一个全局整形变量global,并将它们都初始化,那么链接器将A和B进行链接时会报错:b.o:(.data+0x0): multiple definition of `global转载 2011-12-12 12:00:17 · 535 阅读 · 0 评论 -
ubuntu 10.04下如何以root身份登录
Ubuntu安装后,root用户默认是被锁定了的,不允许登录,也不允许“su”到 root。有人说这是个不好的实践,特别是对于服务器来说。我觉得对于桌面用户来说,这样安全性更高一些,是应该的;但对于服务器可以设置成“允许 su 到root,但不允许root用户直接登录”。而我为了开发时的方便,则在桌面和服务器上都采用这种方式。允许 su 到 root非常简单,下面是设置的方法:me@t转载 2012-02-14 15:29:02 · 826 阅读 · 0 评论 -
Linux(ubuntu)下用eclipse对log4cplus库的安装,编译和使用-由张海伦指导完成
首先下载log4plus的压缩包,http://sourceforge.net/projects/log4cplus/files/log4cplus-stable/1.0.4/log4cplus-1.0.4.tar.bz2/download接着在ubuntu中解压,根据里面的安装提示运行下面命令./configure --prefix=/where/to/install原创 2012-02-14 20:03:06 · 2918 阅读 · 0 评论 -
Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR
Linux网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR. SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回. SO_L转载 2012-02-24 11:26:51 · 854 阅读 · 0 评论 -
ubuntu下配置mysql并使用其c语言API
<!--@page {margin:2cm}p {margin-bottom:0.21cm}--> ubuntu用起来对我这种菜鸟来说还真是适合,就像mysql的安装一样,只需一句话:sudoapt-get installmysql-server,根据我实验成功来看,网上说的还要装mysql-client是完全没有必要的。当然要用c开发数据库转载 2012-02-16 15:20:54 · 850 阅读 · 0 评论 -
Unix环境高级编程第三章习题2(转载修改)
int dup2(fd1,fd2) (int fd1,int fd2){ int fd=0; int array_fd[100]; int i=0; printf(" dup2(%d,%d) \n", fd1, fd2); if((fd1 100){ err_sys(" Please check file_id. ");原创 2012-02-16 17:57:56 · 571 阅读 · 0 评论 -
epoll下ET模式为何一定要用要用非阻塞的模式~
在ET模式中,对于读写请求,阻塞和非阻塞都可以解决问题。但是,对于accept之类的连接请求就不行了。根本原因我认为是连接是涉及网络双方的交互,比如三次的握手。这样即使epoll已经等待连接事件,但是不能保证能接收到新连接。而recv等数据已经到本机的内核缓冲区了,剩下的都是本机数据的读取操作,是必然可以解决的。终上所述,影响网络双方的操作都该注意是否使用非阻塞模式,在设置相应的套接字原创 2012-02-26 12:01:28 · 2048 阅读 · 0 评论 -
epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:* EAGAIN: 再试一次* EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block* perror输出: Resource temporarily unavailable转载 2012-02-26 11:50:24 · 2427 阅读 · 0 评论 -
fork两次如何避免僵尸进程收藏
#include #include #include #include int main(void) { pid_t pid; if ((pid = fork()) < 0) { fprintf(stderr,"Fork error!/n"); exit(-1);转载 2012-03-02 10:15:19 · 570 阅读 · 0 评论 -
Linux内核信号处理机制介绍
本文简单介绍下Linux信号处理机制,为介绍二进制翻译下信号处理机制做一个铺垫。本文主要参考书目《Linux内核源代码情景分析》《独辟蹊径品内核:Linux内核源代码导读》首先,先说一下什么是信号。信号本质上是在软件层次上对中断机制的一种模拟,其主要有以下几种来源:程序错误:除零,非法内存访问… 外部信号:终端Ctrl-C产生SGINT信号,定时器到期产生SIGALRM…转载 2012-03-06 16:02:43 · 3773 阅读 · 1 评论 -
Linux多线程中使用信号-2
Linux 多线程应用中如何编写安全的信号处理函数转自:http://www.ibm.com/developerworks/cn/linux/l-cn-signalsec/index.html?ca=drs-cn-0618周 婷 (zhouting@cn.ibm.com), 软件工程师, IBM 中国软件开发技术实验室刘 坚 (liujsh@cn.ibm.com),转载 2012-03-06 16:09:19 · 4062 阅读 · 1 评论 -
Linux多线程中使用信号-1
在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号。它完全是异步的(我们完全不知到信号会在进程的那个执行点到来!)。然而信号处理函数的实现,有着许多的限制;比如有一些函数不能在信号处理函数中调用;再比如一些函数read、recv等调用时会被异步的信号给中断(inter转载 2012-03-06 16:07:30 · 18507 阅读 · 8 评论 -
linux中断处理浅析
最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着"重要的事马上做, 不重要的事推后做"的异步处理思想. 于是整理一下~第一阶段--获取中断号每个CPU都有响应中断的能力, 每个CPU响应中断时都走相同的流程. 这个流程就是内核提供的中断服务程序.在进入中断服务程序时, CPU已经自动禁止了本CPU上的中断响应, 因为CPU不能假定中断服务程转载 2012-03-12 17:27:59 · 561 阅读 · 0 评论 -
splice系列系统调用
关注splice系列系统调用(包括splice,tee和vmsplice)已经有一段时间了,开始的时候并未能领会splice的意义所在,致使得出了“splice系列系统调用不怎么实用”的错误结论。随着内核研究的深入,才逐渐懂得:splice对于其中一个文件描述符必须是管道的要求并不是阻碍其应用的障碍,并且恰恰相反,它正是splice的本质所在。splice主要通过去除在内核空间和用户空间之转载 2014-04-06 21:38:48 · 2307 阅读 · 0 评论