unix环境高级编程笔记
文章平均质量分 59
叶树
这个作者很懒,什么都没留下…
展开
-
Linux写时拷贝技术(copy-on-write)
源于网上资料COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exe转载 2016-01-15 20:54:02 · 233 阅读 · 0 评论 -
linux 线程 线程同步
因为线程独自拥有的只有栈,其他的区域线程共同拥有。并且对共享区域的操作并不都是原子的。对共享区域的操作顺序又是不确定的。就像创建两个文件描述符同时指向同一文件,并且连续向文件中写入那么写的东西可能是乱七八糟的。这时就需要线程对共享区的同步。 而另一种情况是,多个线程的指令执行顺序需要同步。(这与访问区域无关,纯粹是指令顺序的方面)临界区: 保证在某一时刻只有一个原创 2016-02-15 23:36:28 · 307 阅读 · 0 评论 -
linux 线程 线程属性
typedef struct{int etachstate; //线程的分离状态int schedpolicy; //线程调度策略structsched_param schedparam; //线程的调度参数int inheritsched; //线程的继承性int scope; //线程的作用域size_t guardsize; //线程栈末尾的警戒缓冲区大小in原创 2016-02-14 18:15:49 · 228 阅读 · 0 评论 -
linux 线程 原语套装
1>创建线程int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);pthread_t 线程id结构 (不一定是一个整数 有可能是地址之类的)只保证在本进程中是唯一的值pthread_attr_t原创 2016-02-13 15:47:36 · 274 阅读 · 0 评论 -
linux 信号 中断的系统调用
apue上提到了低速的系统调用 解释很长很麻烦 第三版 260页我只是简单的理解为能够发生阻塞并且阻塞时间够长且有可能永远阻塞的系统调用 当这些函数处于阻塞期,恰好捕捉到一个信号,则该系统调用返回出错,起errno设置为EINTR;而我们希望重启这些函数则出线了这样的代码again:if(( n == read(fd,buf,BUFSIZE)) {i原创 2016-01-30 18:19:56 · 319 阅读 · 0 评论 -
linux 守护进程
守护进程创建步骤1. 创建子进程,父进程退出所有工作在子进程中进行 形式上脱离了控制终端2. 在子进程中创建新会话 setsid()函数 使子进程完全独立出来,脱离控制3. 改变当前目录为根目录 chdir()函数 防止占用可卸载的文件系统 也可以换成其它路径4. 重设文件权限掩码 umask()函数 防止继承的文件创建屏蔽字拒绝转载 2016-02-11 07:37:54 · 212 阅读 · 0 评论 -
linux 信号 简介
几种信号的产生:1> 用户按下某些终端键 如 ctrl+c 产生SIGINT中断信号2> 硬件异常 如除数为零3> 别的进程或进程自己发送的信号 如kill命令函数4> 软件信号 如SIGPIPE SIGALRM SIGURG内核对每个信号处理 使用这三种方式1> 忽略此信号 也就是不做任何处理 特殊:2>执行系统默认动作 在进程启动时大部分信原创 2016-01-30 12:07:35 · 226 阅读 · 0 评论 -
linux 信号 回收子进程
#include #include #include #include #include #include void err(char *name, int err_num){perror(name);exit(err_num);return ;}void fun(int signo){int re;int pid原创 2016-02-10 15:29:44 · 1232 阅读 · 0 评论 -
linux 信号 sigsuspend abort
int sigsuspend(const sigset_t *mask) //总是返回-1 并将errno设置为EINTR提供了一个原子操作 现将信号屏蔽字设置为mask然后挂起程序 直到捕捉一个信号而且从信号处理程序返回 则sigsuspend返回返回之后 进程屏蔽字会恢复为调用sigsuspend之前的值如果信号终止进程那么挂起也失效void abor原创 2016-02-09 22:12:40 · 391 阅读 · 0 评论 -
linux 信号 信号集
int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signum); int sigdelset(sigset_t *set, int signum); int s原创 2016-02-09 18:59:40 · 367 阅读 · 0 评论 -
linux 信号 alarm和pause
unsigned int alarm(unsigned int seconds); 该函数在执行seconds秒之后产生SIGALRM信号,如果忽略或不捕捉这个信号将终止其调用进程。 返回值:0或以前设置闹钟时间的余留秒数 如果以前设置了闹钟并且还未超时 则 alarm(0) 将取消原来的闹钟 并且返回余留的秒数 如果以前设置了闹钟并且原创 2016-02-09 09:44:13 · 381 阅读 · 0 评论 -
linux 进程间通信 FIFO
创建一个有名管道,解决无血缘关系的进程通信, fifo;创建一个FIFO文件,存储在硬盘上。进程预先知道文件的名字,便可以通过这个标识进行通讯。可以通过函数创建文件int mkfifo(const char *pathname, mode_t mode);可以通过命令mkfifo穿件FIFO文件void err(char *name, int err_num){原创 2016-02-08 18:33:02 · 295 阅读 · 0 评论 -
linux 存储映射
存储映射:能将一个磁盘文件映射到内存空间,我们可以通过指针来使用这个数据。如果设置相应的prot那么我们写内存是,磁盘空间的数据也相应改变。 依赖于这几个函数 mmap(.......) 用于创建一块内存空间 并 与磁盘文件建立联系 mprotect 改变映射地址空间的权限 msync 将内原创 2016-01-28 11:30:00 · 1453 阅读 · 0 评论 -
linux 进程间通信 pipe
pipe 是有亲属关系的进程之间通信的经典方法 int pipe(int fd[2]); //创建管道的函数 成功返回0 出错返回-1参数fd[2] 作为返回文件描述符的容器 fd[0]为读打开 fd[1]为写打开可以fork子进程 继承文件描述符实现通信 可以fork多个子进程进行通信但是你要有足够的精力管理他们以至于 不会发生混乱所以这样做是不可取的fpa原创 2016-01-19 13:34:05 · 254 阅读 · 0 评论 -
多进程 fork之后父子进程 对文件描述符的作用
#include #include #include #include #include #include int main() {int fd = open("data",O_WRONLY | O_CREAT, 0777); int pid = -1;int stat;if(fd == -1){printf("文件打开原创 2016-01-03 23:42:13 · 499 阅读 · 0 评论 -
多进程 vfork
#include #include int main(){int test = 0;int pid = 0;if(( pid = vfork()) > 0){printf("%d\n",test);}else if(pid == 0){test += 10;} return 0; }若fork结果原创 2016-01-04 00:04:28 · 258 阅读 · 0 评论 -
exec族函数总结
1> execve为系统调用 其他的都是封装的函数l:参数列表 p:在环境变量PATH中寻找 v:参数数组 e:替换环境变量列表返回值:函数出错 返回0 否则不反回(原来的用户区已经被替换 只留下PCB所以没有返回的地方)exec族函数只替换用户区 但是对内核区的PCB也有一定的影响(详见 apue3 p201页)2> 对文件描述符的影响 若打开文件原创 2016-01-15 20:22:39 · 453 阅读 · 0 评论 -
linux 线程同步 信号量
这里的信号量指的是POSIX 的未命名信号量POSIX的信号量还可用于进程间的同步 这里只说线程的同步信号量的工作方式1 测试信号量是否为02是 休眠 直到 信号量大于0时才可能被唤醒3否 信号量减一测试与减1是一个原子操作 否则会出现减2的事情int sem_init(sem_t *sem, int pshared, unsigned原创 2016-02-16 17:43:30 · 303 阅读 · 0 评论