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,工作队列,软中断是允许被打断,工作队列通常是有睡眠操作的。工作队列是运行在进程上下文中,可运行阻塞的函数。