unix高级编程

UNIX环境高级编程:符号链接

12-11
符号链接是指向一个文件的间接指针.他与上一节所诉的硬链接不同.硬链接直接指向文件的i节点.引入 符号链接的原因是为了避开硬链接的一些限制. 硬链接通常要求链接和文件位于同一文件系统中. 只有超级用户才能创建指向目录的硬链接. 对符号链接以及他指向何种对象并无任何文件系统限制.任何用户都可以创建指向目录的符号链接.符号 链接一般用于将一个文件或这个目录结构移动到系统中的另一个位置. 当使用以名字引用文件的函数 的时候,应当了解该函数是否处理符号链接.也就是该函数是否跟随符号链接到达它锁链节的文件.

UNIX环境高级编程:du命令

12-11
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间 的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能: 显示每个文件和目录的磁盘使用空间. 3.命令参数: -a或-all  显示目录中个 别文件的大小.   -b或-bytes  显示目录或文件大小时,以byte为单位.   -c或--total  除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和. -k或--kilobytes  

UNIX环境高级编程:线程限制

08-24
如下图: 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/unix/

UNIX环境高级编程:线程同步之互斥锁、读写锁和条件变量

08-24
一.使用互斥锁 1.初始化互斥量 pthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER;//静态初始化互斥量 int pthread_mutex_init(pthread_mutex_t*mutex,pthread_mutexattr_t*attr);//动态初始化互斥量 int pthread_mutex_destory(pthread_mutex_t*mutex);//撤销互斥量 不能拷贝互斥量变量,但可以拷贝指向互斥量的指针,这样就可以使多个函数

UNIX环境高级编程:死锁

08-24
操作系统中有若干进程并发执行,它们不断申请.使用.释放系统资源,虽然系统的进程协调.通信机制会对它们进行控制,但也可能出现若干进程都相互等待对方释放资源才能继续运行,否则就阻塞的情况.此时,若不借助外界因素,谁也不能释放资源,谁也不能解除阻塞状态.根据这样的情况,操作系统中的死锁被定义为系统中两个或者多个进程无限期地等待永远不会发生的条件,系统处于停滞状态,这就是死锁. 产生死锁的原因主要是: (1) 因为系统资源不足. (2) 进程运行推进的顺序不合适. (3) 资源分配不当等. 如果系统资源

UNIX环境高级编程:线程属性之分离属性

08-24
说到线程的分离状态,我认为,之所以会有这个状态,是因为系统对某些线程的终止状态根本不感兴趣导致的. 我们知道,进程中的线程可以调用: int pthread_join(pthread_t tid, void **rval_ptr): 来等待某个线程的终止,获得该线程的终止状态,并收回所占的资源.如果对线程的返回状态不感兴趣,可以将rval_ptr设置为NULL.也可以调用: int pthread_detach(pthread_t tid): 将此线程设置为分离状态,设置为分离状态的线程在线程结

UNIX环境高级编程:网络基础概念

08-24
TCP协议分成两个不同的协议: 1.网络传输中差错的传输控制协议TCP 2.专门负责对不同网络进行互联的互联网协议IP 网络体系结构概念: 网络体系结构即是指网络的层次结构和每层所使用协议的集合 OSI:(Open System Interconnect Reference Model) ISO:国际标准化组织(International Standardization Organization) TCP/IP:(传输控制/网络通讯协定:Transmission Control Protocol

UNIX环境高级编程:线程属性

08-24
pthread_attr_t 的缺省属性值 1.初始化一个线程对象的属性 int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0,否则返回错误的编号 形  参: attr       指向一个线程属性的指针 说  明:Posix线程中的线程属性pthread_attr_t主要包括scope属性.detach属性.堆栈地址.堆栈大小.优先级. pthread_attr_init实现时为属性对象分配了动态内存空间. 线程属性结构如下: typ

UNIX环境高级编程:线程属性之并发度

08-24
并发度控制着用户级线程可以映射的内核线程或进程的数目.如果操作系统的实现在内核级的线程和用户级的线程之间保持一对一的映射,那么改变并发度并不会有什么效果,因为所有的用户级线程都可能被调度到.但是,如果操作系统的实现让用户级线程到内核级线程或进程之间的映射关系是多对一的话,那么在给定时间内增加可运行的用户级线程数,可能会改善性能. pthread_setconcurrency函数可以用于提示系统,表明希望的并发度. #include <pthread.h> int pthread_getconc

UNIX环境高级编程:线程和进程的区别

08-24
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性.进程和线程的区别在于: (1)一个程序至少有一个进程,一个进程至少有一个线程. (2)线程的划分尺度小于进程,使得多线程程序的并发性高. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控

UNIX环境高级编程:进程管理和通信

08-24
进程和程序的区别: 进程: 程序的一次执行过程   动态过程,进程的状态属性会发生变化 程序:存放在磁盘上的指令.数据的有序集合  是个文件,可直观看到 程序program 静态的概念,本身不会发生变化.指令谁来执行,数据谁来访问?cpu! 但前提是cpu能够接触到,程序执行过程需要cpu.内存.以及相关的资源. 进程是动态的,需要执行时才创建,运行结束要回收,包括创建.调度.执行.消亡的过程. 二者是关系:无程序进程就无意义,是内容与形式的关系. 一个程序的执行,至少创建一个进程. 一个进程的

UNIX环境高级编程:system V消息队列

08-19
unix早期通信机制中的信号能够传送的信息量有限,管道则只能传送无格式字节流,这远远是不够的. 消息队列(也叫报文队列)客服了这些缺点: 消息队列就是一个消息的链表. 可以把消息看作一个记录,具有特定的格式. 进程可以按照一定的规则向消息队列中添加新消息:另一些进程可以从消息队列中读走消息. 消息队列是随内核持续的,只有内核重启或人工删除时,该消息队列才会被删除. system V消息队列使用消息队列标识符标识.具有足够特权的任何进程都可以往一个给定队列放置一个消息,具有足够特权的任何进程都可以

UNIX环境高级编程:线程同步之互斥量

08-19
互斥量(也称为互斥锁)出自POSIX线程标准,可以用来同步同一进程中的各个线程.当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步. 互斥量,从字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用于保护临界区(共享资源),以保证在任何时刻只有一个线程能够访问共享的资源. 互斥量类型声明为pthread_mutex_t数据类型,在<bits/pthreadtypes.h>中有具体的定义. 1互斥量初始化和销毁 #include <pthread

UNIX环境高级编程:非阻塞设置

08-19
非阻塞I/O使我们可以调用open.read和write这样的I/O操作,并使这些操作不会永远阻塞.如果这种操作不能完成, 则调用立即出错返回,表示该操作如继续执行将阻塞. 对于一个给定的描述符有两种方法对其指定非阻塞: (1)如果调用open获得描述符,则可指定O_NONBLOCK标志. (2)对于已经打开的一个描述符,则可调用fcntl,由该函数打开O_NONBLOCK文件标志. 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn

UNIX环境高级编程:IPC总结

08-19
IPC主要包括:管道,消息队列,信号量,共享内存, 套接字(SOCKET). 一.IPC对象的持久性 每种IPC机制都会借助一种数据结构,这种数据结构的实例称为该IPC机制的对象(相应的,用于同步互斥的数据结构的实体也可以称为该机制的对象).理清IPC对象的持久性,有助于理解相应的IPC的工作机制. 1.对象持久性 大致上IPC对象的持久性可以分为三种: 进程持久性:具有这种持久性的对象在持有它的最后一个进程关闭了该对象时就会消失. 内核持久性:具有这种持久性的对象在两种情形下会消失,(1)系统

UNIX环境高级编程:select、poll和epoll

08-19
一.select select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一. select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,不过可以通过修改宏定义甚至重新编译内核的方式提升这一限制. 另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增长.同时,由于网络响应时间的延迟使得大量TCP连接处于非活跃状态,但调用select()会

UNIX环境高级编程:主线程与子线程的退出关系

08-19
我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下. 1.  主线程等待新线程先结束退出,主线程后退出.正常执行. 示例代码: #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <sys/types.h> pthread_t ntid;//线程ID void print

UNIX环境高级编程:pthread_create的问题

08-19
linux 下常用的创建多线程函数pthread_create(pthread_t * thread , pthread_attr_t * attr , void *(*start_routine)(void*) , void *args); 其中第一个参数用来保存线程信息,第二个参数指新线程的运行属性,可以设置为NULL,第三个参数为自定义的线程函数,第四个参数就是线程函数需要用到的参数,一般如果要传递多个参数,可以设置为结构体(struct)类型,这里我们使用int类型的变量.   下面我着

UNIX环境高级编程:存储映射I/O(mmap函数)

08-19
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件.实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域.而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件.共享内存中的内容往往是在解除映射时才

unix高级编程-UNIX环境高级编程 times() 疑问

06-13
问题描述 UNIX环境高级编程 times() 疑问 例程 int main(int argc, char *argv[]) { clock_t s_clk,e_clk; struct tms s_tms,e_tms; s_clk = times(&s_tms); system("ls /dev"); system("date"); sleep(1); e_clk = times(&e_tms); printf("e_clk %ld - s