1.静态库和动态库
2. gcc编译四个阶段:预处理、编译、汇编和链接
标准I/O提供了三种类型的缓冲,分别是?单缓冲,双缓冲,循环缓冲。
3.Vim的三种模式:命令模式 插入模式 底行模式
“i键”进入编译模式 “ctrl+v”进入可视模式 “ESC:”进入底行模式
y ##复制 c ##剪切 u ##撤销
d ##删除 p ##粘贴 ctrl+r ##恢复
4.GDB调试命令:
添加断点: break + 行数 (b 也行)
delete 断点号n:删除第n个断点
i b 查看断点信息
list:简记为 l , 查看文件源代码
run(简写r): 运行程序
continue(简写c) : 继续执行,到下一个断点停止
next(简写n) :执行一步
5.文件的四极空间代表:
代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内
存中的镜像。
数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静
态分配的变量和全局变量。
堆(heap):堆是用于存放进程运行中被动态分配的内存段
栈:栈又称堆栈,栈是用户存放程序临时创建的局部变量,也就是说我们函数括
弧“{}”中定义的变量
6.文件系统四部分:引导块,超级块,索引节点,数据区
超级块: 用于存放文件的控制信息。
引导块:在文件系统的开头,通常为一个扇区,其中存放引导程序,用于读入并启动
操 作系统;
超级块:用于记录文件系统的管理信息。特定的文件系统定义了特定的超级块;
inode区(索引节点):一个文件或目录占据一个索引节点。第一个索引节点是该文
件 系统的根节点。利用根节点,可以把一个文件系统挂在另一个文件系统的非叶节点
上;
数据区:用于存放文件数据或者管理数据。
c语言中没有明确给定初值的全局变量和静态变量存放在哪儿?未初始化数据区
7.文件创建目录:mkdir()
8.对硬连接和软连接的描述:(简答题)
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件
不管是什么类型都给它分配一个编号,称为索引节点号。硬连接的作用是允许一个文件拥
有多个有效路径名。
软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在软连接
中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
9.修改文件权限命令:chmod
10.命令行有什么函数提供:shell
11.文件描述符的数据类型:int
12.lseek(fd,位移数,whence):设置文件偏移量
13.复制文件描述符{
dup(fd)
dup2(2,3)将2复制给3
fcntl()
}
14.文件状态值:{
只读:O_RDONLY
只写:O_WRONLY
读写:O_RDWR
写入时添加至文件末尾:O_APPEND
不存在时创建:O_CREAT
截断文件为零长度:O_TRUNC
}
15.编译有线程的文件要加 -lpthread 参数。
16.412编码
17.Linux下获取文件属性函数: stat()
18.更改目录:cd .. pwd查看当前所在的目录位置 ls查看目录下的文件
19.虚拟文件系统是什么?(简答题)Virtual File System,
虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于
给用户空间的程序提供文 件系统接口;同时,它也提供了内核中的一个 抽象功
能,允许不同的文件系统共存。系统中所有的文件系统不但 依赖 VFS 共存,而且
也依靠 VFS 协同工作。
20.linux中主要有哪几种文件?(简答题)
普通文件、链接文件、管道、套接字、目录文件和设备文件
21.简述系统调用和库函数?(简答题)
系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性。
系统调用通常用于底层文件访问。
系统调用发生在内核空间,因此如果在用户空间的一般应用程序中使用系统调用来进
行文件操作,会有用户空间 到内核空间切换的开销
库函数调用是系统无关的,因此可移植性好。
库函数调用通常用于应用程序中对一般文件的访问。
由于库函数调用是基于C库的,因此也就不可能用于内核空间的驱动程序中对设备的
操作。
使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?
这是因为,读写文件通常是大量的数据,这时,使用库函数就可以大大减少系统调用
的次数。
22.open系统打开的标志:
进程:
23.查看进程的命令:ps
24.什么是进程?(简答题)
进程就是一个程序的执行实例,也就是正在执行的程序。在操作系统的眼里,进程就
是一个担当分配系统资源的实体。
25.进程的资源有哪俩部分组成?(简答题)
常驻内存 非常驻内存
26.进程和程序的去吧?(简答题)
(1)程序是永存的;进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,
存在是暂时的;
(2)程序是静态的观念,进程是动态的观念;
(3)进程具有并发性,而程序没有;
(4)进程是竞争计算机资源的基本单位,程序不是。
(5)进程和程序不是一一对应的: 一个程序可对应多个进程即多个进程可执行同一
程序; 一个进程可以执行一个或几个程序
27.linux进程的结构有哪些?(简答题)
数据段:存放的是全局变量、常数以及动态数据分配的数据空间。
代码段:存放的是程序代码的数据。
堆栈段:存放的是子程序的返回地址、子程序的参数以及程序的局部变量等。
28.fork函数返回值的含义?(简答题)
返回值,失败,返回-1,linux下系统调用的一半惯例,错误码在errno中
= 0,子进程
>0 , 父进程
29.进程中return 和 exit 的区别?(简答题)
exit是整个程序的结束。return是某个函数的结束,并返回结果。
return返回函数值,是关键字; exit 是一个函数。
return是C语言提供的,exit是操作系统提供的
return是函数的退出(返回);exit是进程的退出。
exit和_exit就是用来正常终止一个进程的,主要区别是_exit会立刻进入内核,而exit先执行
一些清除工作然后才进入内核。
30.fork和vfork的区别?(简答题)
fork和vfork都可以用来创建子进程。vfork产生的子进程和父进程共享数据段.。
fork创建的子进程和父进程的运行的先后顺序是没有保证的
vfork的特点是保证子进程先运行。只有子进程通过exec或者exit退出后,父进程才能运
行.
31.父进程调用wait可能出现三种情况?(简答题)
父进程的所有子进程都在运行,wait()阻塞。
父进程没有任何子进程,则立即出错返回。
有一个子进程已经终止,则取得该子进程的终止状态立即返回。
32.孤儿进程是什么?谁回收?
父进程消失,子进程仍然存在,那么这个子进程就是孤儿进程。孤儿进程被 init 进程
回收。
僵尸进程是什么?谁回收?
子进程比父进程先结束,而父进程又没有释放子进程占用的资源,此时子进程将成为
一个僵尸进程,由父进程回收
33.父进程查询子进程的退出状态可以用wait/waitpid函数
wait(status)子进程的结束状态值会由参数status 返回
waitpid(0/-1,&status,0)
- 1表示不等待某个特定PID的子进程而是回收任意一个子进程,0表示默认的方式(阻
塞式)来进行等待
34.fcntl函数的功能:1、复制一个已有的描述符,类似于dup函数功能。
2、获取/设置文件描述符标志。
3、获取/设置文件状态标志。
4、获取/设置一步I/O所有权。
5、获取/设置记录锁。
35.如何创建软连接?
创建的语法:ln -s是必须的,然后后面跟一个目标文件夹,最后是一个当前目录的软
连接名。
36. getpid()获取子进程id getppid()获取父进程id
getuid()获取用户id geteuid()获取有效用户id
37.管道分为有名管道和无名管道。
列出有名管道和无名管道的区别和特点 ?
有名管道:也称为FIFO管道,是一种文件类型,在文件中可以查看到。
匿名管道在系统中没有实名,不能再文件系统中以任何方式看到该管道,它只是进程的一
种资源,会随着进程的结束而被系统清除。
无名管道是无名的,有名管道是有名的;
无名管道只能用于父子进程或兄弟进程之间的通信,而有名管道可用于任意两进程之间通
信;
无名管道是无形的,即无名管道的 inode 结构不是在磁盘上存储的,而是临时生成的,而
有名管道的 inode 结点在磁盘上。
特点:半双工,只能一端写一端读,数据先进先出,.数据被进程从管道读出后,在管道中
该数据就不存在了
38.列出linux的通信方式,简单描述?·
管道包括三种:普通管道,流管道,命名管道
信号量:是一个计数器,可以用来控制多个进程对共享资源的访问
消息队列:是由消息的链表,存放在内核中并由消息队列标识符标识
信号:是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生
共享内存:是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,
但多个进程都可以访问
套解字:是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的
进程通信
39.简单介绍信号是什么?
信号是异步的
信号是UNIX系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行
动
信号是因为某些错误条件而产生的,比如内存段冲突、浮点处理器错误或者非法指令
等
信号是在软件层次上对中断的一种模拟,所以通常把它称为是软中断
40.对可靠信号和不可靠信号的处理过程?
41.简单说明信号的处理方式?
1、信号忽略:
忽略此信号,大多数信号都可以采用这种方式进行处理,除了9( SIGKILL )和
19(SIGSTOP )信号。
2、信号捕捉
进程要通知内核在某种信号产生时,需要调用一个用户函数,在用户函数中,用
户可以自己定义信号处 理的方式,在Linux下我们不能捕捉SIGKILL信号和
SIGSTOP信号
3、执行默认动作
一般情况下是终止该进程
42.产生信号的方式?
1、来自键盘的信号
2、硬件异常产生信号
3、通过系统调用向进程发送信号
4、由软件条件产生信号
43.简述信号的声明周期?
信号诞生,信号在进程中注册,信号在进程中注销,信号处理函数执行完毕。
44.进程中不能忽略的两个信号?
SIGSTOP和SIGKILL
安装信号signal和sigaction的不同?
45.一个进程是 PCB 结构和数据组合。
46.中断描述?
中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU
暂时停止正在运行的程序, 转而为该内部或外部事件或预先安排的事件服务的程序中
去,服务完毕后再返回去继续运行被暂时中断的程序
47.向消息队列发送信号:msgsnd ()
接收队列的函数: msgrcv()
创建消息队列:msgget()
关闭消息队列:msgctl()
48.谁用于发送定时器?
alarm 用于设置定时器,当计时时间到达时,向进程发送SIGALRM信号。
49.共享内存,信号量,消息队列
无名管道(有亲戚)
Q函数的原型
共享内存:
shmget()函数用来创建共享内存
shmat()函数 作用就是用来启动对该共享内存的访问,并把共享内存连接到当前进程的
地址空间
shmdt()函数用于将共享内存从当前进程中分离
shmctl()函数用来控制共享内存
50.什么是线程?特点?
51.线程中取消和结束的区别?
52.线程和进程的关系?
53.线程和进程的区别?
进程是资源分配的单元,线程是执行行单元
进程间切换代价大,线程间切换代价小
进程拥有资源多,线程拥有资源少
多个线程共享进程的资源
54.线程的创建函数:pthread_create()
线程分离状态:.pthread_detach()
退出线程:pthread_exit()
取消线程:Pthread_cancel()
55.互斥锁的两种状态:上锁 解锁
56.对互斥锁的理解?
互斥锁主要用于实现内核中的互斥访问功能,是一种用于多线程编程中,防止两条线
程同时对同一公共资源进行读写的机制。
57.初始化互斥锁函数:pthread_mutex_init ()
也可以用宏PTHREAD_MUTEX_INTIALIZER 初始化静态分配的互斥锁
上锁函数:int pthread_mutex_lock()以阻塞的方式申请互斥锁
int pthread_mutex_trylock()以非阻塞的方式申请互斥锁
解锁函数:pthread_mutex_unlock()释放操作只能由占有该互斥锁的线程完成。
58.网络编程
TCP与UDP的区别?
TCP面向连接,UDP是面向无连接的
TCP提供可靠的服务,UDP尽最大努力交付,即不保证可靠交付
TCP传输效率相对较低,UDP传输效率高
TCP连接只能是点到点、一对一的,UDP支持一对一,一对多,多对一
59.TCP的三次握手?
第一次握手:建立连接时,客户端发送syn包到服务器,并进入SYN_SENT状态,等待
服务器确认;SYN:同步序列编号
第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,
即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发
送完毕,客户端和服务器进入ESTABLISHE)状态,完成三次握手
60.什么是套接字?
套接字,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过
程
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供
并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传
输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/
IP协议交互提供了称为套接字
61.UDP,TCP属于 传输层 协议。
62.面向连接的三个阶段?
63.移动指针lseek函数的参数: lseek(int fd ,_off_t offset , int whence)
第一个参数fd为已经打开的文件,第二个参数offset为根据参考位置,第三个参数
whence表示偏移量 64. OSI的三层模型?
第一层:物理层,主要功能是利用物理传输介质为数bai据链路层提供物理连接,以便
透明的传送比特流
第二层:数据链路层,在此层将数据分帧,并处理流控制
第三层:网络层,本层通过寻址来建立两个节点之间的连接,为源端的运输层送来的
分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。