06 2013 档案

摘要:问题出自《编程之美》3.1 1 /* 2013.6.25 2 * 问题:给定两个字符串s1和s2,要求判定给定字符串s2是否 3 * 能够通过字符串s1循环移位得到的字符串包含。 4 * 例如: 5 * 1. s1 = AABCD,s2 = CDAA,则返回true; 6 * 2. s1 = ABCD,s2 = ACBD,则返回false 7 */ 8 #include 9 #include 10 #include 11 12 enum { true = 1, false = 0 }; 13 14 /* 2013.6.25 15 * 方式1:用s2... 阅读全文
posted @ 2013-06-25 09:40 life91 阅读(253) 评论(0) 推荐(0)
摘要:进程间通信方式有多种,包括管道、FIFO、消息队列、共享内存、信号量等。 1. 半双工管道 该方式只能在具有公共祖先的进程之间使用。通常,一个管道由一个进程创建,然后进程通过fork函数创建一个子进程,因此父、子进程之间就可以应用该管道作为父子之间的通信方式。 函数pipe()创建管道:#include <unistd.h>int pipe(int fileds[2]); 其中,参数fileds返回两个文件描述符:filefds[0]为读而打开,fileds[1]为写而打开,且fileds[1]的输出作为fileds[0]的输入。如图所示: 图1 单进程中半双... 阅读全文
posted @ 2013-06-08 09:20 life91 阅读(214) 评论(0) 推荐(0)
摘要:1. 基本操作 套接子是通信端点的抽象。套接字描述符作为套接字的标识符,它是以一种文件形式存在的。如果通信端点是一个“人”,那么套接字标识符就是人的“身份证”。 函数socket()用来创建一个套接字,并获得套接字描述符。1 #include <sys/socket.h>2 int socket(int domain, int type, int procotol);3 // 成功返回套接字描述符;出错返回-1 其中,参数domain确定通信特征,它包括AF_INET,AF_INET6,AF_UNIX; 参数type确定套接字的类型:SOCK_DGRAM:是长度固定... 阅读全文
posted @ 2013-06-07 16:10 life91 阅读(251) 评论(0) 推荐(0)
摘要:有关线程创建:【Linux 编程】线程编程 当多个控制线程共享相同的数据时,需要确保每一个线程看到一致的数据。当一个线程修改数据变量时,其他线程在读取这个变量值时就可能会看到不一致的数据。在变量修改时间多于一个存储访问的处理结构中,当存储器读取或存储器写这两个周期交叉时,潜在的数据不一致性就会出现。为了解决这种数据不一致性的问题,线程利用锁机制来保证在保证数据的一致性问题。若读取数据或写数据操作是原子操作,则不存在数据竞争或数据不一致性问题。 1. 互斥锁(pthread_mutex_t) 互斥锁保证同一时间只允许一个线程访问数据。任何其他试图获取已加锁的互斥锁,就会被阻塞直到当前线... 阅读全文
posted @ 2013-06-05 10:41 life91 阅读(217) 评论(0) 推荐(0)
摘要:一个进程中可以包含多个线程。线程中包含了表示进程执行环境必须的信息,其中包括进程中标识线程的线程ID、一组寄存器值、栈、调度 优先级和策略、信号屏蔽字、errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。 需要注意的是,进程ID是全局唯一的,但是线程ID只有在它所属的进程环境中有效。 通过调用函数pthread_create来创建线程(更多内容:man 3 pthread_create):1 #include <pthread.h>2 3 int pthread_create(pthread_t 阅读全文
posted @ 2013-06-04 09:41 life91 阅读(244) 评论(0) 推荐(0)
摘要:vfork用于创建一个新进程,而该进程的目的就是exec一个新程序。vfork和fork均创建一个子进程,但是vfork并不将父进程的地址空间完全复制到子进程中,因为子进程会调用exec(或exit),于是也就不会访问改地址空间。在子进程调用exec或exit之前,它继续在父进程的空间中运行。 vfork和fork之间的另一个区别:vfork保证子进程先运行。在子进程调用exec或exit之后,父进程才可能被调度运行。 1 #include <stdlib.h> 2 #include <unistd.h> 3 #include <sys/types.h> 4 阅读全文
posted @ 2013-06-03 15:48 life91 阅读(241) 评论(0) 推荐(0)
摘要:信号驱动式I/O是指进程预先告知内核,使得当某个描述字上发生某事时,内核使用信号通知相关进程。图1概括展示信号驱动式I/O模型。图1 信号驱动式I/O模型 针对一个进程建立一个相关进程的处理函数,需要通过signal()函数来建立。 基本信号:(linux 控制台中输入:man 7 signal) SIGINT(值为2,默认动作:terminal):Interrupt from keyboard。 SIGTERM(值为15,默认动作:terminal):Termination signal SIGCHILD(值为20,17,28,默认动作:ignore):child stoppe... 阅读全文
posted @ 2013-06-03 11:01 life91 阅读(287) 评论(0) 推荐(0)