1.文件IO与标准IO的区别
标准IO在C库中定义的一组专门用于输入输出的函数(api);
1,有缓冲机制,通过缓冲机制减少系统调用的次数,提高效率
2,围绕流进行操作,流用FILE *描述,FILE表示结构体,包含文件的信息
3,默认打开了三个流:stdio(标准输入)、stdout(标准输出)、stderr(标准错误)
4,只能操作普通文件;
文件IO是在posix(可移植操作系统接口)中定义的一组用于输入输出函数;
1.没有缓冲机制,每次IO操作都会引起系统调用
2.围绕文件描述符进行操作,文件描述符是非负整数,从0开始依次分配
3. 默认打开了三个文件描述符:0(标准输入)、1(标准输出)、2(标准错误)
4. 可以操作除d以外任意类型的文件。
2. 静态库与动态库的区别
静态库和动态库,本质区别是代码被载入时刻不同。
1) 静态库在程序编译时会被连接到目标代码中。
优点:程序运行时将不再需要该静态库;运行时无需加载库,运行速度更快。
缺点:静态库中的代码复制到了程序中,因此体积较大;静态库升级后,程序需要重新编译链接。
2) 动态库是在程序运行时才被载入代码中。
优点:程序在执行时加载动态库,代码体积小;程序升级更简单;不同应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。
缺点:运行时还需要动态库的存在,移植性较差。
3. 什么是守护进程?守护进程的步骤?
1. 特点:守护进程是后台进程;生命周期比较长,从系统启动时开启,系统关闭时结束;它是脱离控制终端且周期执行的进程。
2. 步骤:
1) 创建子进程,父进程退出
让子进程变成孤儿进程,成为后台进程;fork()
2) 在子进程中创建新会话
让子进程成为会话组组长,为了让子进程完全脱离终端;setsid()
3) 改变进程运行路径为根目录
原因进程运行的路径不能被删除或卸载;chdir("/")
4) 重设文件权限掩码
目的:增大进程创建文件时权限,提高灵活性;umask(0)
5) 关闭文件描述符
将不需要的文件关闭;close() 三个文件描述符 ()
write不需要刷新
4. 进程与线程的区别
共性:都为操作系统提供了并发执行能力.
不同点:
1.调度和资源:线程是系统调度的最小单位,进程是资源分配的最小单位
2.地址空间方面:同一个进程创建的多个线程共享进程的资源;进程的地址空间相互独立
3.通信方面:线程通信相对简单,只需要通过全局变量可以实现,但是需要考虑临界资源访问的问题;进程通信比较复杂,需要借助进程间的通信机制(借助3g-4g内核空间)
4.安全性方面:线程安全性差一些,当进程结束时会导致所有线程退出;进程相对安全
5.程序和进程的区别
程序:编译好的可执行文件
1.存放在磁盘上的指令和数据的有序集合(文件)
2.程序是静态的,没有任何执行的概念
3.进程:一个独立的可调度的任务
4.执行一个程序所分配的资源的总称
5.进程是程序的一次执行过程
6.进程是动态的,包括创建、调度、执行和消亡。
6.子进程的特点
1)子进程几乎拷贝了父进程的全部内容。包括代码、数据、系统数据段中的pc值、栈中的数据、父进程中打开的文件等;但它们的PID、PPID是不同的。
2)父子进程有独立的地址空间,互不影响;当在相应的进程中改变全局变量、静态变量,都互不影响。
3)若父进程先结束,子进程成为孤儿进程,被init进程收养,子进程变成后台进程。
4)若子进程先结束,父进程如果没有及时回收,子进程变成僵尸进程(要避免僵尸进程产生)。
7. 共享内存的操作步骤
创建key值ftok
1. 创建或者打开共享内存shmget(shm: share memory)
2. 映射共享内存到用户空间shmat
3. 撤销映射shmdt
4. 删除共享内存shmctl
8.消息队列的操作步骤
- 创建key值 ftok
- 创建或打开消息队列 msgget
- 添加消息 msgsnd
- 读取消息 msgrcv
- 删除消息队列 msgctl
9.信号灯集的操作步骤
1、创建k值,创建或打开共享内存
2、映射共享内存到访问该进程的私有内存空间
3、创建或打开信号灯集
4、信号灯集的初始化
5、循环从终端往内存写入数据
6、写入完成后,释放资源
7、另一个进程申请资源
10.基于UDP的socket
服务器端流程:
(1)、建立套接字文件描述符,使用函数socket(),生成套接字文件描述符。
(2)、设置服务器地址和侦听端口,初始化要绑定的网络地址结构。
(3)、绑定侦听端口,使用bind()函数,将套接字文件描述符和一个地址类型变量进行绑定。
(4)、接收客户端的数据,使用recvfrom()函数接收客户端的网络数据。
(5)、向客户端发送数据,使用sendto()函数向服务器主机发送数据。
(6)、关闭套接字,使用close()函数释放资源。UDP协议的客户端流程。
客户端流程:
(1)、建立套接字文件描述符,socket()。
(2)、设置服务器地址和端口,struct sockaddr。
(3)、向服务器发送数据,sendto()。
(4)、接收服务器的数据,recvfrom()。
(5)、关闭套接字,close()。
11.TCP/UDP
1、TCP面向连接,UDP无连接
2、TCP数据保证正确、顺序正确,UDP可能丢包
3、TCP可靠稳定,但是慢效率低,UDP快,容易丢包。
12.为什么是三次握手?
1、为了防止已失效的连接请求报文段突然又送到了,产生错误。
2、客户端发送请求报文遗漏,后续才到达时,服务端还是回回复,浪费资源
3、客户端发送请求报文后掉线了,服务端还是会回复,浪费资源.
13.为什么是四次挥手?
1、TCP是全双工通信,意味着关闭是双方都需要确认的行为。
2、需要时间释放资源,一旦合并需要等很久。
3、客户端会以为自己第一次发的报文没有送到,不断尝试发送第一次的报文。
14.TCP,UDP适用场景?
TCP应用场景
效率要求相对低,但对准确性要求相对高的场景。文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。
UDP应用场景
效率要求相对高,对准确性要求相对低的场景。QQ聊天、在线视频、网络语音电话、广播通信