linux
文章平均质量分 73
摩天轮的思念
这个作者很懒,什么都没留下…
展开
-
I/O多路转接(一)之select_server
select模型的特点:(1)可监控的文件描述符个数取决与sizeof(fd_set)的值。(2)将fd加入select监控集的同时,还要再使用一个数据结构array保存放到select监控集中的fd。(3)可见select模型必须在select前循环array(加fd,取maxfd),select返回后循环array (FD_ISSET判断是否有时间发生)。原创 2017-06-28 15:09:47 · 459 阅读 · 0 评论 -
linux命令之eval
eval可以读取一连串的参数,然后按照参数特性来执行。参数数目不限,彼此之间用分号隔开。 eval会对后面的cmdLine进行两遍扫描,如果在第一遍扫面后cmdLine是一个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证简介引用的语义。也就是说,eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。因此,eval命令适用于那些一次扫描无法实现其功能的变量。原创 2017-07-01 14:54:48 · 631 阅读 · 0 评论 -
Linux之守护进程
守护进程也称精灵进程( Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd 等。同时,守护进程完成许多系统任务。原创 2017-06-07 21:59:59 · 293 阅读 · 0 评论 -
I/O多路转接之poll服务器
函数说明: #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); 参数说明:fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符;每当调用这个函数之后,系统不会清空这个数组,操作起来比较方便;特别是对于socket连接比较多的情况下,在一定程度上可以提高原创 2017-06-30 15:25:37 · 347 阅读 · 0 评论 -
]I/O多路转接(二)之epoll服务器
epoll是为处理大批量句柄而作了改进的poll。当然,这不是 2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通 知方法。原创 2017-06-29 22:39:44 · 358 阅读 · 0 评论 -
linux命令之Xargs用法详解
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如:find /sbin -perm +700 |xargs ls -l xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments 。原创 2017-06-21 12:58:24 · 762 阅读 · 0 评论 -
linux之crond(作业规划进程)
crond是Linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有 要执行的工作便会自动执行该工作。而Linux任务调度的工作主要分为以下两类: 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信原创 2017-06-08 14:24:00 · 1612 阅读 · 0 评论 -
TCP协议中的定时器
TCP协议中的定时器: (1)连接建立(connection establishment)”定时器(2)“重传(retransmission)”定时器(3)“延迟ACK(delayed ACK)”定时器(4)“持续 (persist)”定时器(5)“保活(keep alive)”定时器(6)FIN_WAIT_2定时器(7)TIME_WAIT定时器原创 2017-06-20 07:46:07 · 675 阅读 · 0 评论 -
URG(紧急位)与PSH(急迫位)
URG(紧急位): 紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。T C P的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的),设置为1时,首部中的紧急指针有效;为0时,紧急指针没有意义。PSH(急迫位): 在一个交互程序中,当客户原创 2017-06-20 07:27:25 · 1706 阅读 · 0 评论 -
gdb调试多进程,多线程
一:普通命令1.list命令 list linenum 显示程序第linenum行周围的程序 list function 显示函数名为function的函数的源程序 list 显示当前行后面的源程序 list - 显示当前行前面的源程序2.run(r) 运行命令。3.break(b)原创 2017-06-04 21:44:59 · 1975 阅读 · 1 评论 -
linux之信号阻塞
实际执⾏行信号的处理动作称为信号递 达(Delivery) 信号从产⽣生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞 (Block )某个信号。 使用函数sigprocmask()阻塞信号的传递,只是延迟信号的到达。信号会在解除阻塞后继续传递。原创 2017-04-27 13:17:32 · 341 阅读 · 0 评论 -
线程安全与可重入函数
可重入函数与线程安全的区别与联系:1、线程安全是在多线程情况下引发的,而可重入函数可以在只有一个线程的情况下发生。2、线程安全不一定是可重入的,而可重入函数则一定是线程安全的。3、如果一个函数有全局变量,则这个函数既不是线程安全也不是可重入的。4、如果一个函数当中的数据全身自身栈空间的,则这个函数即使线程安全也是可重入的。转载 2017-05-01 17:27:01 · 420 阅读 · 0 评论 -
SIG_CHLD信号
SIGCHLD,在一个进程终止或者停止时,将SIGCHLD信号发送给其父进程,按系统默认将忽略此信号,如果父进程希望被告知其子系统的这种状态,则应捕捉此信号。(17)SIGCHLD属于unix以及类unix系统的一种信号 产生原因 siginfo_t代码值 1,子进程已终止 CLD_EXITED 2,子进程异常终止(无core) CLD_KILLED 3,子进程异常终止(有core) CLD原创 2017-05-01 12:56:49 · 2870 阅读 · 0 评论 -
STCP与TCP协议
(1)首先SCTP和TCP之间的最大区别是SCTP的连接可以是多宿主连接的,TCP则一般是单地址连接的(2)其次SCTP是基于消息流,而TCP则是基于字节流。(3)在网络安全方面,SCTP增加了防止恶意攻击的措施。不同于TCP连接采用的三次握手机制,SCTP连接采用四次握手机制, 有效的防止了类似于SYN Flooding的防范拒绝服务攻击。原创 2017-07-01 15:52:01 · 12814 阅读 · 0 评论 -
循环冗余校验码
CRC即循环冗余校验码(Cyclic Redundancy Check ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。编原创 2017-06-10 16:55:04 · 1747 阅读 · 0 评论 -
高级I/O模型(2)--dup/dup2
dup和dup2是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。这两个函数的原形如下:利用函数dup,我们可以复制一个描述符。 传给该函数一个既有的描述符,它就会返回一个新的描述符,这个新的描述符是传给它的描述符的拷贝。这意味着,这两个描述符共享同一个数据结构。原创 2017-06-28 14:06:39 · 709 阅读 · 0 评论 -
linux之UDP_server
UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。 传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。 **实现确认机制、重传机制、窗口确认机制**。原创 2017-06-26 14:10:27 · 11172 阅读 · 0 评论 -
shell脚本实现彩色进度条
产生进度条的元素: 1.一个不断向右增长的容器,可以直观看出当前的进度。 2.一个反应进度的百分比,在这里用到转义字符"%%",代表的是"%" 3.一个标志,反应该进度是正在运行还是卡死,在程序中体现的是char *label="-\\|/";,是顺时针输出.原创 2017-07-05 10:06:03 · 625 阅读 · 0 评论 -
高级I/O模型(1)--socketpair
非阻塞IO,纪录锁,系统V流机制,I/O多路转接(select/poll),readv和writev函数以及存储 映射IO(mmap),这些统称为高级IO。 pipe用来创建管道,但是单个管道只能单向通信,⼀端用于读,⽽而另一端用于写。如果要实现进程双向通信,必须创建一对管道。而socketpair则可以⽤用来创建双向通 信的管道,头文件:原创 2017-06-25 15:56:20 · 584 阅读 · 0 评论 -
路由器的路由表生成算法
路由选择算法:1、向量-距离路由选择算法2、链路-状态路由选择算法3、LS算法4、Dijkstra算法原创 2017-06-13 13:12:20 · 4656 阅读 · 0 评论 -
linux中的网络端口
常用的保留TCP端口号有: HTTP 80,FTP 20/21,Telnet 23,SMTP 25,DNS 53等。常用的保留UDP端口号有: DNS 53,BootP 67(server)/ 68(client),TFTP 69,SNMP 161等。原创 2017-06-13 09:39:18 · 3415 阅读 · 0 评论 -
Linux之ARP协议
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬 件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这 个作用。原创 2017-06-12 22:41:41 · 3069 阅读 · 0 评论 -
Linux--进程池,线程池
池的概念:由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一组资源的集合,这组资源在服务器启动之初就完全被创建并初始化,这称为静态资源分配。当服务器进入正是运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分配。原创 2017-06-24 19:35:23 · 2611 阅读 · 2 评论 -
多进程以及多线程socket编程
多进程,多线程socket编程与单进程不同的只是服务器端的不同,客户端是一样的。多进程:父进程fork子进程, 子进程退出,但是子进程的子进程仍在运行,变成了孤儿进程,由1号进程回收,父进程不用等待子进程的子进程的退出,它俩是爷孙进程,不用回收子进程。多线程:不用关闭多余的文件描述符表,进程有两张文件描述符表,而线程只有一张文件描述符表,共享进程的文件描述符表,因此不用关闭多余的文件描述符表。原创 2017-06-23 11:40:28 · 3880 阅读 · 0 评论 -
单进程socket编程
在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成 的socket pair就唯一标识一个连接。原创 2017-06-22 23:03:31 · 1618 阅读 · 0 评论 -
linux之信号捕捉
signal函数此函数在上一篇函数有介绍,可以参考上一篇博客 http://blog.csdn.net/qq_36221862/article/details/70171361 sigaction函数修改信号处理动作(通常在Linux用其来注册一个信号的捕捉函数)#include原创 2017-05-01 11:07:46 · 435 阅读 · 0 评论 -
linux之信号产生
产生信号的条件主要有:A. 通过终端按键产生信号用户在终端按下某些键时,终端驱动程序会发送信号给前台进程,例如Ctrl-C产生SIGINT信 号,Ctrl-\产生SIGQUIT信号,Ctrl-Z产生SIGTSTP信号。SIGINT的默认处理动作是终止进程, SIGQUIT的默认处理动作是终止进程并且Core Dump,首先解释什么是Core Dump(核心转储)。原创 2017-04-14 07:29:09 · 984 阅读 · 0 评论 -
linux之消息队列
1.创建新消息队列或取得已存在消息队列 原型:int msgget(key_t key, int msgflg); 参数:key:可以认为是一个端口号,也可以由函数ftok生成。 msgflg: IPC_CREAT 如果IPC不存在,则创建一个IPC资源,否则打开操作。 IPC_EXCL:只有在共享内存不存在的时候,新的共享内存原创 2017-03-03 16:23:29 · 409 阅读 · 0 评论 -
linux之进程等待
pid_t waitpid(pid_t pid, int *status, int options); 返回值:(1). 当正常返回的时候waitpid返回收集到的⼦子进程的进程ID; (2). 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集, 则返回0; (3). 如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;原创 2017-03-03 14:09:29 · 706 阅读 · 0 评论 -
File指令
File指令功能:file是通过查看文件的头部内容,来获取文件的类型。使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script文件,或者是其它的什么格式。file能识别的文件类型:目录、Shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。在Linux系统中,文件类型根据文件的权限以及文件内容类原创 2017-02-20 20:32:23 · 1123 阅读 · 0 评论 -
linux中的9个权限位
每个权限部分可选字符选项如下:r: read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。w:write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限。S:set如果在所有者权限部分,表示该文件不能被执行和设置为set-user-ID模式。如果在组权限部分,表示该文件不能被执行和设置为set-group-ID模式。s:如果该字符在所有者权限部分,表示该文件可执行和设置为set-user-ID模式。如果设置在组权限部分,表示该文件可执行和设置为原创 2017-02-20 14:15:10 · 19843 阅读 · 1 评论 -
linux中的atexit函数
按照ISO C的规定,一个进程可以登记至少32个函数,这些函数将由exit自动调用。 atexit函数是一个特殊的函数,它是在正常程序退出时调用的函数,我们把他叫为登记函数(函数原型:int atexit (void (*)(void))): 函数名: atexit 头文件:#include 功 能: 注册终止函数(即main执行结束后调用的函数)原创 2017-02-20 11:40:35 · 4712 阅读 · 0 评论 -
task_struct的补充
本文转自: http://blog.csdn.net/npy_lp/article/details/733518713、其他 (1)、用于保护资源分配或释放的自旋锁 [cpp] view plain copy/* Protection of (de-)allocation: mm, files, fs, tty, keyring转载 2017-02-18 21:21:30 · 264 阅读 · 0 评论 -
操作系统进程调度算法
基本的操作系统进程调度算法包括先来先服务(first come first serve),时间片轮转(round robin),多级反馈轮转法(round robin with multiple feedback),优先级法(静态优先级法/动态优先级法),短作业优先法(shortest job first),最高响应比优先法(highest response_ratio next)。原创 2017-02-18 20:16:29 · 13702 阅读 · 1 评论 -
文件里的三个重要时间:access time(访问时间), modify time(修改时间), change time(状态改动时间)
(1)-a 文件名 将access time恢复成系统时间。 -m 文件名 将modify time恢复成系统时间。 -c 文件名 将access time,modify time恢复成系统时间。(2)-a 指定时间 文件名 将access time恢复成系统时间。 -m 指定时间 文件名 将modify time恢复成系统时间。 -c 指定时间 文件名 将access time,modify time恢复成系统时间(3)-a -原创 2017-02-14 19:39:12 · 11223 阅读 · 1 评论 -
task_struct 结构描述
进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两转载 2017-02-18 10:12:28 · 323 阅读 · 0 评论 -
linux 命名管道
命名管道是一个设备文件,因此,即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够通过FIFO 相互通信。值得注意的是,FIFO(first input first output)总是按照先进先出的原则工作,第一 个被写入的数据将⾸首先从管道中读出。 命名管道的创建与读写 : Linux下有两种方式创建命名管道。一是在Shell下交互地建立一个命名管道,二是在程序中使用系统函数建立命名管道。Shell方式下创建命名管道的系统函数有两个:mknod和mkfifo。两个函数均定义在头文件原创 2017-02-27 12:09:50 · 564 阅读 · 0 评论 -
linux的find指令
Linux下find命令在目录结构中搜索文件,并执行指定的操作。 Linux下提供了相当多的查找命令,比如which指令,比如whereis指令。我们经常在linux要查找某个文件,但不知道放在哪里了,可以 使用下面的一些命令来搜索:Which 查看可执行文件的位置。 whereis 查看文件的位置。locate 配合数据库查看文件位置。Find 实际搜寻硬盘查询原创 2017-02-17 14:25:03 · 934 阅读 · 0 评论 -
进度条函数
在写进度条函数之前,我们要先明确几个概念:一·回车换行:'\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;'\n' 换行,换到当前位置的下一行,而不会回到行首;Unix系统里,每行结尾只有“”,即"\n";Windows系统里面,每行结尾是“”,即“\r\n”;Mac系统里,每行结尾是“”,即"\r";。一个直接后果是,Uni原创 2017-02-17 13:43:38 · 2862 阅读 · 0 评论 -
简单shell的编写
shell执行过程:1.读取用户从键盘输入的命令(调用read函数);2.分析命令,以命令名为文件名,并将其他参数改造为系统调用execvp()参数处理所要求的格式;3.终端进程(shell)调用fork()或者vfork()建立一个子进程(个人建议采用fork());fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1. fork ():子进程拷贝父进程的数据段,代码段 (共享代码,数据私有) vfork ( ):子进程与父进程共享数据段 2.原创 2017-02-25 20:40:01 · 1201 阅读 · 0 评论