面试题补充:

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.消息队列的操作步骤

  1. 创建key值 ftok
  2. 创建或打开消息队列 msgget
  3. 添加消息 msgsnd
  4. 读取消息 msgrcv
  5. 删除消息队列 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聊天、在线视频、网络语音电话、广播通信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值