![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
APUE
文章平均质量分 77
ctthuangcheng
这个作者很懒,什么都没留下…
展开
-
系统时钟和硬件时钟同步
硬件时钟调整与系统时钟一致://system("hwclock -w")int SyncSystemClockToHw(void){ struct timeval tv; struct tm tm_time; int fd; int ret = 0; ret = access("/dev/rtc1",F_OK); if(0 == ret) { fd = open("/dev/原创 2015-01-22 16:34:29 · 4089 阅读 · 0 评论 -
UNIX环境高级编程——进程管理和通信(总结)
进程管理与通信进程的管理进程和程序的区别:进程: 程序的一次执行过程 动态过程,进程的状态属性会发生变化程序:存放在磁盘上的指令、数据的有序集合 是个文件,可直观看到程序program 静态的概念,本身不会发生变化。指令谁来执行,数据谁来访问?cpu!但前提是cpu能够接触到,程序执行过程需要cpu、内存、以及相关的资源。进程是动态的,需要执行时才创建,运行结束要回收,包括创建、调度、执行、原创 2013-07-19 12:49:58 · 2285 阅读 · 0 评论 -
UNIX环境高级编程——线程和信号
每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的。这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变。这样如果一个信号选择忽略某个信号,而其他的线程可以恢复信号的默认处理行为,或者为信号设置一个新的处理程序,从而可以撤销上述线程的信号选择。原创 2013-07-18 17:41:53 · 2048 阅读 · 0 评论 -
UNIX环境高级编程——网络编程常用函数及结构
IP地址的转换#include int inet_aton(const char *strptr, struct in_addr *addrptr);//将strptr字符串转换成32位的网络字节序(二进制值--a.b.c.d->32)。int_addr_t inet_addr(const char *strptr)//功能通上,返回地址。in_addr a原创 2013-07-19 14:32:24 · 1728 阅读 · 0 评论 -
UNIX环境高级编程——线程和fork
当线程调用fork时,就为子进程创建了整个进程地址空间的副本。子进程通过继承整个地址空间的副本,也从父进程那里继承了所有互斥量、读写锁和条件变量的状态。如果父进程包含多个线程,子进程在fork返回以后,如果紧接着不是马上调用exec的话,就需要清理锁的状态。 在子进程内部只存在一个线程,它是由父进程中调用fork的线程的副本构成的。如果父进程中的线程占有锁,子进程同样占有这些锁。问题是子进原创 2013-07-18 17:01:05 · 1924 阅读 · 0 评论 -
UNIX环境高级编程——线程私有数据
下面说一下线程中特有的线程存储,Thread Specific Data 。线程存储有什么用了?他是什么意思了?大家都知道,在多线程程序中,所有线程共享程序中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线程存储的意义。原创 2013-07-17 17:04:00 · 5161 阅读 · 1 评论 -
UNIX环境高级编程——线程同步之条件变量以及属性
条件变量变量也是出自POSIX线程标准,另一种线程同步机制。主要用来等待某个条件的发生。可以用来同步同一进程中的各个线程。当然如果一个条件变量存放在多个进程共享的某个内存区中,那么还可以通过条件变量来进行进程间的同步。 每个条件变量总是和一个互斥量相关联,条件本身是由互斥量保护的,线程在改变条件状态之间必须要锁住互斥量。条件变量相对于互斥量最大的优点在于允许线程以无竞争的方式等待条件的发生原创 2013-07-16 22:59:40 · 1844 阅读 · 0 评论 -
UNIX环境高级编程——线程同步之读写锁以及属性
读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,和互斥量不同的是:互斥量会把试图进入已保护的临界区的线程都阻塞;然而读写锁会视当前进入临界区的线程和请求进入临界区的线程的属性来判断是否允许线程进入。相对互斥量只有加锁和不加锁两种状态,读写锁有三种状态:原创 2013-07-16 15:16:35 · 2350 阅读 · 0 评论 -
UNIX环境高级编程——线程属性之并发度
并发度控制着用户级线程可以映射的内核线程或进程的数目。如果操作系统的实现在内核级的线程和用户级的线程之间保持一对一的映射,那么改变并发度并不会有什么效果,因为所有的用户级线程都可能被调度到。但是,如果操作系统的实现让用户级线程到内核级线程或进程之间的映射关系是多对一的话,那么在给定时间内增加可运行的用户级线程数,可能会改善性能。 pthread_setconcurrency函数可以用于提示原创 2013-07-17 15:48:01 · 2968 阅读 · 0 评论 -
UNIX环境高级编程——线程属性
pthread_attr_t 的缺省属性值 属性值结果scopePTHREAD_SCOPE_PROCESS新线程与进程中的其他线程发生竞争。detachstatePTHREAD_CREATE_JOINABLE线程退出后,保留完成状态和线程 ID。stackaddrNULL新线程具有系统分配的栈地址。stacksize1M新线程具有系统定义的栈大小。priority0新线程的优先级为0。inheri原创 2013-07-17 13:32:54 · 1674 阅读 · 0 评论 -
UNIX环境高级编程——互斥量属性
互斥量具有一些属性,通过修改这些属性可以控制锁的一些行为。缺省的互斥锁属性及其值如下:pshared: PTHREAD_PROCESS_PRIVATEtype: PTHREAD_MUTEX_DEFAULTprotocol: PTHREAD_PRIO_NONEprioceiling: – robustness: PT原创 2013-07-17 16:17:23 · 2775 阅读 · 0 评论 -
UNIX环境高级编程——线程属性之分离属性
说到线程的分离状态,我认为,之所以会有这个状态,是因为系统对某些线程的终止状态根本不感兴趣导致的。 我们知道,进程中的线程可以调用:int pthread_join(pthread_t tid, void **rval_ptr); 来等待某个线程的终止,获得该线程的终止状态,并收回所占的资源。如果对线程的返回状态不感兴趣,可以将rval_ptr设置为NULL。也可以调用:int p原创 2013-07-17 16:07:19 · 1677 阅读 · 0 评论 -
UNIX环境高级编程——线程同步之互斥锁、读写锁和条件变量(小结)
一、使用互斥锁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*m原创 2013-07-17 12:27:26 · 2550 阅读 · 0 评论 -
UNIX环境高级编程——线程限制
原创 2013-07-17 13:31:11 · 1554 阅读 · 0 评论 -
UNIX环境高级编程——死锁
死锁 操作系统中有若干进程并发执行,它们不断申请、使用、释放系统资源,虽然系统的进程协调、通信机制会对它们进行控制,但也可能出现若干进程都相互等待对方释放资源才能继续运行,否则就阻塞的情况。此时,若不借助外界因素,谁也不能释放资源,谁也不能解除阻塞状态。根据这样的情况,操作系统中的死锁被定义为系统中两个或者多个进程无限期地等待永远不会发生的条件,系统处于停滞状态,这就是死锁。 产生死锁的原因主要原创 2013-07-17 11:53:23 · 1971 阅读 · 0 评论 -
UNIX环境高级编程——线程与进程区别
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:(1)一个程序至少有一个进程,一个进程至少有一个线程。(2)线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的原创 2013-07-17 11:57:44 · 2866 阅读 · 0 评论 -
UNIX环境高级编程——记录上锁(fcntl函数)以及死锁检测
去原创 2013-07-10 11:37:20 · 3701 阅读 · 0 评论 -
UNIX环境高级编程——网络基础概念
TCP协议分成两个不同的协议:1、网络传输中差错的传输控制协议TCP2、专门负责对不同网络进行互联的互联网协议IP网络体系结构概念:网络体系结构即是指网络的层次结构和每层所使用协议的集合OSI:(Open System Interconnect Reference Model)ISO:国际标准化组织(International Standardization Organization)TCP/IP原创 2013-07-19 13:09:21 · 1656 阅读 · 0 评论 -
UNIX环境高级编程——I/O多路转接(select、pselect和poll)
恩原创 2013-07-15 11:39:39 · 2236 阅读 · 0 评论 -
UNIX环境高级编程——select和epoll的区别
select和epoll都用于监听套接口描述字上是否有事件发生,实现I/O复用select(轮询)#include #include int select (int maxfdpl, fd_set* readset, fd_set* writeset, fd_set* exceptset, const struct timeval* timeout) 调用时轮询一次所有描述字,超时时再原创 2013-07-15 15:59:07 · 1886 阅读 · 0 评论 -
串口编程
串口编程:原创 2014-07-03 15:22:12 · 1387 阅读 · 0 评论 -
syslog(),closelog()与openlog()--日志操作函数
为了满足某些目的,进行日志记录是很有必要的。 在典型的 LINUX 安装中,/var/log/messages 包含所有的系统消息,/var/log/mail 包含来自邮件系统的其它日志消息,/var/log/debug 可能包含调试消息。根据你的LINUX的版本,你可以在 /etc/syslog.conf 或者 /etc/syslog-ng/syslog-ng.conf 文件里检查你的系统转载 2014-03-25 11:20:34 · 2670 阅读 · 0 评论 -
UNIX环境高级编程——信号(API)
一、信号在内核中的表示 实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样的:每个信原创 2013-07-06 21:56:56 · 1601 阅读 · 0 评论 -
pdflush的工作原理
大家知道,在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到磁盘上,在下面几种情况下,系统会唤醒pdflush回写脏页:1 、定时方式: 定时机制定时唤醒pdflush内核线程,周期为/proc/sys/vm/dirty_writeback_centisecs ,单位是(1/100转载 2014-03-18 11:17:18 · 1682 阅读 · 0 评论 -
time,gettimeofday,clock_gettime
time()提供了秒级的精确度1、头文件 2、函数原型time_t time(time_t * timer) 函数返回从UTC1970-1-1 0:0:0开始到现在的秒数用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。#include #include int main(void){转载 2014-02-11 15:45:02 · 1832 阅读 · 1 评论 -
UNIX环境高级编程——TCP/IP网络编程
常用网络信息检索函数gethostname()getppername()getsockname()gethostbyname()gethostbyaddr()getprotobyname()getprotobynumber()getservbyname()getservbyport()网络属性设置头文件:#include #include 获取一个套接口选项int getsockopt(原创 2013-07-19 15:02:44 · 2262 阅读 · 0 评论 -
UNIX网络编程——使用线程的TCP回射服务器程序
同一进程内的所有线程除了共享全局变量外还共享:(1)进程指令;(2)大多数数据;(3) 打开的文件(即描述符);(4)信号处理函数和信号处置;(5)当前工作目录;(6)用户ID和组ID。不过每个线程有各自的:(1)线程ID;(2)寄存器集合,包括程序计数器和栈指针;(3)栈(用于存放局部变量和返回地址);(4)errno;(5)信号掩码;(6)优先级。原创 2013-07-29 11:07:47 · 1569 阅读 · 0 评论 -
UNIX环境高级编程——Linux终端设备详解
终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由Teletype公司生产的。在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种:1.串行端口终端(/dev/ttySn)串行端口终端(Serial Port Terminal)是使用计算转载 2013-08-03 16:25:07 · 1722 阅读 · 0 评论 -
UNIX环境高级编程——单实例的守护进程
#include #include #include #include #include #include #include #include #include #include /* 创建守护进程函数 */int daemonize(){ int childpid, fd, fdtablesize; int error, in, out; /* 忽略终端I/O信号,S原创 2013-08-03 03:08:23 · 1705 阅读 · 0 评论 -
UNIX环境高级编程——创建孤儿进程
/* 创建孤儿进程 父进程终止后,向子进程发送挂断信号,又接着发送继续信号。 */ #include #include #include #include #include #include #include /* 处理接受到的挂断信号 */ static void sig_hup(int signo) {原创 2013-08-03 02:44:52 · 1514 阅读 · 0 评论 -
UNIX环境高级编程——标准IO-实现查看所有用户
#include #include #include #include int main(int argc, char *argv[]){ char szBuf[512]; char szName[512]; FILE *f = fopen("/etc/passwd","r"); memset(szBuf, 0, sizeof(szBuf)); int i; while(fg原创 2013-08-03 02:03:09 · 1433 阅读 · 0 评论 -
UNIX环境高级编程——epoll函数使用详解
我原创 2013-07-15 15:24:33 · 3342 阅读 · 0 评论 -
UNIX环境高级编程——实现uid to name
setpwent()用来将getpwent()的读写地址指回文件开头,即从头读取密码文件中的账号数据。strcut passwd * getpwent(void); getpwent()用来从密码文件(/etc/passwd)中读取一项用户数据,该用户的数据以passwd 结构返回。第一次调用时会取得第一位用户数据,之后每调用一次就会返回下一项数据,直到已无任何数据时返回NULL。原创 2013-08-03 02:27:42 · 1750 阅读 · 0 评论 -
UNIX环境高级编程——初始化一个守护进程
#include #include #include #include #include #include #include #include #include /* 创建守护进程函数 */int daemonize(){ int childpid, fd, fdtablesize; int error, in, out; /* 忽略终端I/O信号,STOP信号 */原创 2013-08-03 03:05:54 · 1571 阅读 · 0 评论 -
UNIX环境高级编程——环境变量表读取/添加/修改/删除
#include #include #include int main(){ char* pValue; pValue = getenv("HOME"); // 起始目录(主目录) printf("$HOME = %s\n", pValue); // 在主目录下建立a.txt文件 char szFilePath[100]; strcpy(szFilePath, pValue)原创 2013-08-03 01:56:21 · 1762 阅读 · 0 评论 -
UNIX网络编程——进程间通信概述
一、顺序程序与并发程序特征顺序程序特征顺序性封闭性:(运行环境的封闭性)确定性可再现性并发程序特征共享性并发性随机性二、进程互斥1、由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥2、系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。3、在进程中涉及到互斥资源的程序段叫临界区举例如下图:假设x = 1; 当A进程已经判转载 2013-08-03 00:20:37 · 1637 阅读 · 0 评论 -
UNIX环境高级编程——线程同步之互斥量
互斥量(也称为互斥锁)出自POSIX线程标准,可以用来同步同一进程中的各个线程。当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步。互斥量,从字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用于保护临界区(共享资源),以保证在任何时刻只有一个线程能够访问共享的资源。互斥量类型声明为pthread_mutex_t数据类型,在中有具体的定义。原创 2013-07-16 13:59:11 · 1878 阅读 · 0 评论 -
UNIX环境高级编程——线程
我原创 2013-07-15 17:39:24 · 1766 阅读 · 0 评论 -
UNIX环境高级编程——pthread_create的问题
linux 下常用的创建多线程函数pthread_create(pthread_t * thread , pthread_attr_t * attr , void *(*start_routine)(void*) , void *args);其中第一个参数用来保存线程信息,第二个参数指新线程的运行属性,可以设置为NULL,第三个参数为自定义的线程函数,第四个参数就是线程函数需要用到的参数,一般如果原创 2013-07-16 12:22:11 · 1500 阅读 · 0 评论 -
UNIX环境高级编程——标准I/O库
一、原创 2013-07-05 12:09:36 · 1329 阅读 · 0 评论