随笔分类 -  Unix网络编程

System V共享内存介绍
摘要:(一)简单概念 共享内存作为一种进程间通信的方式,其相较于其他进程间通信方式而言最大的优点就是数据传输速率快。其内部实现的方式采用了Linux进程地址空间中的mmap文件映射区,将文件内容直接映射到各自进程的进程地址空间中,进程对各自进程地址空间的访问即可 完成数据通信,由于直接读取内存的方式,故其 阅读全文

posted @ 2018-03-17 14:34 chenjx_ucs 阅读(295) 评论(0) 推荐(0)

Linux epoll模型
摘要:转载:http://www.cnblogs.com/venow/archive/2012/11/30/2790031.html 定义: epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少 阅读全文

posted @ 2017-10-31 15:56 chenjx_ucs 阅读(344) 评论(0) 推荐(0)

多线程互斥问题
摘要:采用pthread_create建立一个新线程,与fork方式建立新进程不同(尽管在Linux环境下进程与线程具有相同概念)。所有pthread将会共用主线程中的所有变量,而不是如fork方式仅仅将所有变量引用加1。由于pthread共用问题的存在,将会引发在Linux下多线程编程的互斥问题。测试如 阅读全文

posted @ 2017-10-26 15:03 chenjx_ucs 阅读(330) 评论(0) 推荐(0)

为什么IO多路复用需要采用非阻塞式IO
摘要:近段时间开始学习《Unix网络编程》,代码实现了一个简单的IO多路复用+阻塞式的服务端,在学习了非阻塞式IO后,有一个疑问,即: 假如调用了select,并且关注了几个描述字,当关注的描述字可读时,select成果返回并告诉我对应套接口已可读,此时采用阻塞式read或非阻塞式read去读套接口有何区 阅读全文

posted @ 2017-10-26 10:28 chenjx_ucs 阅读(626) 评论(0) 推荐(0)

客户端父进程提前死亡
摘要:示例代码: 问题描述:上述为客户端程序,如果父进程在子进程之前意外死亡,而子进程随后从套接字读到了EOF,则会存在如下问题: 由于父进程提前死亡,对于子进程而言,直接父亲进程死亡,其成为孤儿进程,在Linux内核中,这样的孤儿进程将由init进程收养。子进程读到EOF后,代码A将会执行,子进程向其父 阅读全文

posted @ 2017-10-25 14:58 chenjx_ucs 阅读(183) 评论(0) 推荐(0)

服务器过早终止问题
摘要:示例代码: 上述代码,如果去掉第八行,即当服务器终止后,客户端子进程接收到服务器终止信号,但并不终止客户端父进程,则会出现如下问题: 父进程可以继续接收来自于stdin的输入信息,并将其发送给sockfd套接字,由于服务器已经关闭,当sockfd套接字的第一个分节内容到达服务器时,将会引发一个RST 阅读全文

posted @ 2017-10-25 14:44 chenjx_ucs 阅读(186) 评论(0) 推荐(0)

关于shutdown和close
摘要:示例代码: 上述代码来源《Unix网络编程》卷1第350页,为客户端程序。在A处fork一个进程,子进程用于接收服务端发送给sockfd的消息,父进程用于接收stdin消息并发送给sockfd。 当父进程发送消息结束后,调用shutdown命令向服务端发送FIN,并pause()停止,服务端接收FI 阅读全文

posted @ 2017-10-25 14:38 chenjx_ucs 阅读(246) 评论(0) 推荐(0)

io多路复用-select()
摘要:参照《Unix网络编程》相关章节内容,实现了一个简单的单线程IO多路复用服务器与客户端。 普通迭代服务器,由于执行recvfrom则会发生阻塞,直到客户端发送数据并正确接收后才能够返回,一个服务器进程只能服务于一个客户端,解决这种问题可采用多线程方式(参见虚拟机隐藏进程检测工具实现)和IO多路复用s 阅读全文

posted @ 2017-10-24 15:52 chenjx_ucs 阅读(255) 评论(0) 推荐(0)

wait函数
摘要:当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。子进程终止是一个异步事件(其能够在父进程运行的任何时候发生)。 对于wait(),其调用者,即父进程可以有如下状态: 如果其所有子进程都还在运行,则阻塞; 如果一个子进程已终止,正等待父进程获取其终止状态,则取得该子进程的终止状态后 阅读全文

posted @ 2017-10-24 15:31 chenjx_ucs 阅读(507) 评论(0) 推荐(0)

exit()与_exit()区别
摘要:exit()与_exit()都是用来终止进程的函数,当程序执行到两者函数时,系统将会无条件停止剩下操作,清除进程结构体相应信息,并终止进程运行。 二者的主要区别在于:exit()函数在执行时,系统会检测进程打开文件情况,并将处于文件缓冲区的内容写入到文件当中再退出。而_exit()则直接退出,不会将 阅读全文

posted @ 2017-10-24 14:30 chenjx_ucs 阅读(316) 评论(0) 推荐(0)

导航