unix高级编程笔记

这篇笔记涵盖了Unix编程的多个方面,包括文件描述符、系统调用、IO缓冲、进程同步、线程控制、守护进程创建以及进程间通信。重点讨论了read/write的特性,vfork/fork的区别,条件变量在多线程中的应用,以及如何创建和管理守护进程。此外,还提到了中断处理的上半部和下半部概念。
摘要由CSDN通过智能技术生成

1.文件描述符是非负整数,0代表输入,1代表输出,2代表标准错误输出

2.创建目录时,会创建点和点点目录,指向当前和父目录。

3.read返回读取字节数,返回0读取完毕,返回1读取错误。

4.系统调用是操作系统给用户调用内核代码的接口,库函数是函数操作的封装,通多较复杂,且包含系统调用

5.read write不会进行缓冲,指的是调用一次,就会直接调用内核的系统调用。不缓冲就是不进行预读,比如一次读100字节,我直接缓冲二百字节。

6.打开的文件包含一个v节点,v节点包括文件类型,操作函数的指针,还有一个i节点,包含文件所有者,文件长度,实际存放的物理块

7.符号链接,硬链接不能指向目录的原因,是存在循环引用的风险。软链接会创建i节点指向原来节点的i节点,不会增加连接数,硬链接会在表项中再新建一项,所以会增减链接数目。

8.IO缓冲方式,全缓冲,行缓冲和不带缓冲,全缓冲是缓冲区读满,行缓冲带换行符,不带缓冲立刻输出,适合出错,标准输出链接终端是行缓冲,否则是全缓冲。

9.vfork不会复制父进程空间,不采用写时复制的方式更高效,同时vfork保证子进程先执行,在子进程fork或者exec之后,父进程才会执行。fork会复制进程的页表,vfork不会复制,fork vfork都采用clone实现,由clone调用do fork传递参数来实现。

10.wait是等待一个进程结束,他会阻塞,waitpid是等待特定进程,可以通过参数来指定不阻塞。

11.usleep以us为单位,sleep是s,实现采用alarm系统调用,设置信号挂起,nanosleep使用系统调用

12.线程同步1,互斥量 pthread_t mutex;2.读写锁,pthread_rwlock_rdlock 是在读的时候可以多个线程访问,在写模式下互斥访问。pthread_rwlock_wrlock写加锁状态是,获取读锁的线程都会阻塞,等待这个锁被释放。在读加锁状态时,试图读数据的线程可以获得访问权,写模式加锁的线程会阻塞,应用在读大于写较多的场景。3.条件变量,pthread_cond_t  先mutexlock然后等待资源,wait条件变量,会先释放mutex,再检查条件变量,就会休眠,在返回之前重新锁住mutex。broadcast唤醒队列所有线程,signal唤醒队列中一个线程。4.自旋锁,在未获得锁之前一直处于忙等,不休眠,避免重新调度,自旋锁被持有的时间段,持有自旋锁期间,cpu不能做其他的事情,不会引起线程的重新调度

13.如何创建守护进程1.设置umask默认权限,2.创建子进程,父进程退出,setsid设置子进程成为回话组长,并剥离控制终端,改变当前目录为根目录,设置输出

14.进程间通信:管道 fifo 消息队列 信号量  共享存储 套接字。

15.中断分为上半部和下半部,上半部主要响应中断,尽可能减少操作,尽快返回,因为会屏蔽其他中断,系统得不到相应。下半部采用的方式有软中断,tasklet,工作队列,软中断是允许被打断,工作队列通常是有睡眠操作的。工作队列是运行在进程上下文中,可运行阻塞的函数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值