-
UNIX环境高级编程:线程属性之分离属性
所属栏目:[Unix] 日期:2016-09-27 热度:167
说到线程的分离状态,我认为,之所以会有这个状态,是因为系统对某些线程的终止状态根本不感兴趣导致的。 我们知道,进程中的线程可以调用: int pthread_join(pthread_t tid, void **rval_ptr); 来等待某个线程的终止,获得该线程的终止状态,并收回所占[详细]
-
UNIX环境高级编程:互斥量属性
所属栏目:[Unix] 日期:2016-09-27 热度:103
副标题#e# 互斥量具有一些属性,通过修改这些属性可以控制锁的一些行为。缺省的互斥锁属性及其值如下: pshared: PTHREAD_PROCESS_PRIVATE type: PTHREAD_MUTEX_DEFAULT protocol: PTHREAD_PRIO_NONE prioceiling: robustness: PTHREAD_MUTEX_STALLED_[详细]
-
UNIX环境高级编程:线程私有数据
所属栏目:[Unix] 日期:2016-09-27 热度:57
副标题#e# 线程私有数据(Thread-specific data,TSD):存储和查询与某个线程相关数据的一种机制。 在进程内的所有线程都共享相同的地址空间,即意味着任何声明为静态或外部变量,或在进程堆声明的变量,都可以被进程内所有的线程读写。 一个线程真正拥有的[详细]
-
UNIX环境高级编程:System V 共享内存区
所属栏目:[Unix] 日期:2016-09-27 热度:105
副标题#e# 共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存[详细]
-
UNIX环境高级编程:存储映射I/O(mmap函数)
所属栏目:[Unix] 日期:2016-09-27 热度:157
副标题#e# 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据: 一次从输入文件到共[详细]
-
UNIX环境高级编程:记录上锁(fcntl函数)以及死锁检测
所属栏目:[Unix] 日期:2016-09-27 热度:111
副标题#e# 一、记录锁 record locking 功能:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区。 字节范围锁 byte-range locking 二、历史 flock函数,可以锁整个文件,不能锁文件中的一部分。 fcntl函数,增加了记录锁的功能。[详细]
-
UNIX环境高级编程:非阻塞设置
所属栏目:[Unix] 日期:2016-09-27 热度:87
非阻塞I/O使我们可以调用open、read和write这样的I/O操作,并使这些操作不会永远阻塞。如果这种操作不能完成, 则调用立即出错返回,表示该操作如继续执行将阻塞。 对于一个给定的描述符有两种方法对其指定非阻塞: (1)如果调用open获得描述符,则可指定[详细]
-
UNIX环境高级编程:select、poll和epoll
所属栏目:[Unix] 日期:2016-09-27 热度:143
一、select select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。 select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,不过可以通过修改宏定义[详细]
-
UNIX环境高级编程:epoll函数使用详解
所属栏目:[Unix] 日期:2016-09-27 热度:129
副标题#e# epoll - I/O event notification facility 在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为[详细]
-
UNIX环境高级编程:IPC总结
所属栏目:[Unix] 日期:2016-09-27 热度:57
副标题#e# IPC主要包括:管道,消息队列,信号量,共享内存, 套接字(SOCKET)。 一、IPC对象的持久性 每种IPC机制都会借助一种数据结构,这种数据结构的实例称为该IPC机制的对象(相应的,用于同步互斥的数据结构的实体也可以称为该机制的对象)。理清IPC对[详细]
-
UNIX环境高级编程:主线程与子线程的退出关系
所属栏目:[Unix] 日期:2016-09-27 热度:131
副标题#e# 我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下。 1、 主线程等待新线程先结束退出,主线程后退出。正常执行。 示例代码: #include stdio.h #include stdlib.h #include pthread.h #[详细]
-
UNIX环境高级编程:pthread_create的问题
所属栏目:[Unix] 日期:2016-09-27 热度:156
副标题#e# linux 下常用的创建多线程函数pthread_create(pthread_t * thread , pthread_attr_t * attr , void *(*start_routine)(void*) , void *args); 其中第一个参数用来保存线程信息,第二个参数指新线程的运行属性,可以设置为NULL,第三个参数为自定[详细]
-
UNIX环境高级编程:线程同步之互斥量
所属栏目:[Unix] 日期:2016-09-27 热度:70
互斥量(也称为互斥锁)出自POSIX线程标准,可以用来同步同一进程中的各个线程。当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步。 互斥量,从字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用[详细]
-
Unix系统sar命令详解
所属栏目:[Unix] 日期:2016-09-27 热度:185
副标题#e# 在使用UNIX操作系统的过程中,我们常常会用到各种各样的问题,比如系统运行速度突然变慢,系统容易死机或者主机所带的终端常出现死机,这时我们常常猜测,是硬盘空间太小,还是内存不足?I/O出现瓶颈,或者是系统的核心参数出了问题?这时,我们[详细]
-
UNIX网络编程:套接字选项(心跳检测、绑定地址复用)
所属栏目:[Unix] 日期:2016-09-26 热度:64
01./* 设置套接字选项周期性消息检测连通性 心跳包、 心博。主要用于长连接。 02. * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 03. */ 04.void setKeepAlive( int iSockfd , int iSockAttrOn, socklen_t iIdleTime , socklen_t iInt[详细]
-
UNIX网络编程:套接字选项(SO_REUSEADDR)
所属栏目:[Unix] 日期:2016-09-26 热度:138
1、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接[详细]
-
UNIX网络编程:套接字选项(SO_RCVBUF和SO_SNDBUF)
所属栏目:[Unix] 日期:2016-09-26 热度:95
有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项。 int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen) int setsockopt(int sockfd,int level,int optname,const void *optval,sockle[详细]
-
UNIX网络编程:shutdown与close函数的区别
所属栏目:[Unix] 日期:2016-09-26 热度:123
假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据,此时client调用read,如果接收到FIN 段会返回0,但client此时还是可以write 给server的,wri[详细]
-
UNIX网络编程:僵尸进程
所属栏目:[Unix] 日期:2016-09-26 热度:74
在fork()/exec()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程。补救办[详细]
-
UNIX网络编程:I/O复用:select和poll函数
所属栏目:[Unix] 日期:2016-09-26 热度:142
副标题#e# 我们看到TCP客户同时处理两个输入:标准输入和TCP套接字。我们遇到的问题是就在客户阻塞于(标准输入上)fgets调用,服务器进程会被杀死。服务器TCP虽然正确的给客户TCP发送了一个FIN,但是既然客户进程正阻塞于从标准输入读入的过程,它将看不到[详细]
-
UNIX网络编程:TCP回射服务器/客户端程序
所属栏目:[Unix] 日期:2016-09-26 热度:59
副标题#e# 下面通过最简单的客户端/服务器程序的实例来学习socket API。 serv.c 程序的功能是从客户端读取字符然后直接回射回去: #includestdio.h #includesys/types.h #includesys/socket.h #includeunistd.h #includestdlib.h #includeerrno.h #includea[详细]
-
UNIX网络编程:getsockname和getpeername函数
所属栏目:[Unix] 日期:2016-09-26 热度:120
副标题#e# 这两个函数或者返回与某个套接字关联的本地协议地址(getsockname),或者返回与某个套接字关联的外地协议地址即得到对方的地址(getpeername)。 #include sys/socket.h int getsockname(int sockfd,struct sockaddr* localaddr,socklen_t *addr[详细]
-
UNIX网络编程:并发服务器(TCP)
所属栏目:[Unix] 日期:2016-09-26 热度:94
副标题#e# 在迭代服务器中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现。 网络服务器通常用fork来同时服务多个客户端,父进程专门负责监听端口,每次accept一个新[详细]
-
UNIX网络编程:基本TCP套接字编程
所属栏目:[Unix] 日期:2016-09-26 热度:180
副标题#e# 一、基于TCP协议的网络程序 下图是基于TCP协议的客户端/服务器程序的一般流程: 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待[详细]
-
如何查看AIX和HP-UX文件系统类型
所属栏目:[Unix] 日期:2016-09-26 热度:141
副标题#e# AIX # uname whoami AIX root # df -g Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/hd4 2.25 0.14 94% 9425 22% / /dev/hd2 4.62 0.11 98% 89988 75% /usr /dev/hd9var 2.00 1.40 31% 5038 2% /var /dev/hd3 4.00 1.43 65% 10[详细]

浙公网安备 33038102330478号