LINUX嵌入式 面试题
时间: 2025-01-05 11:33:41 浏览: 44
### Linux嵌入式开发面试问题及答案
#### 进程间通信方式及其优缺点
Linux中的进程间通信(IPC)机制多种多样,每种方法都有其特点:
- **管道(Pipe)**:适用于具有亲缘关系的进程之间的数据传输。创建简单但是仅限于单向通信,并且只支持字节流形式的数据交换[^1]。
- **消息队列(Message Queue)**:提供了一种异步的消息传递模型,允许不同类型的进程之间发送固定大小的信息包。优点在于灵活性高、可靠性强;然而设置相对复杂,性能开销较大。
- **共享内存(Shared Memory)**:允许多个进程直接访问同一块物理内存区域来快速交换大量数据。效率极高但由于缺乏同步控制容易引发竞态条件等问题。
- **信号(Signal)**:用于通知目标进程发生了某个事件。实现简便但携带信息量有限,主要用于简单的状态提示而非大规模数据交互。
- **套接字(Socket)**:不仅可以在本地机器上的应用程序间通讯还可以跨越网络边界与其他主机相连。通用性强不过配置较为繁琐。
#### “野指针”的成因与预防措施
所谓“野指针”,指的是指向未知地址空间或已被释放对象的指针变量。“野指针”主要来源于以下几个方面:
- 动态分配之后未初始化即使用;
- 对象销毁后仍保留原有指针引用;
- 函数返回局部自动变量的地址等情形都会造成该现象的发生。
为了避免上述情况发生,建议采取如下策略:
- 总是在声明动态分配后的指针前赋予NULL值;
- 当不再需要某段由new/malloc获得的空间时立即将对应指针设为空(null),并调用delete/free操作回收资源;
- 尽量减少全局或静态指针的数量,优先考虑栈上定义临时实体或是利用智能指针管理生命周期。
#### TCP/IP协议握手过程概述
TCP三次握手机制确保了客户端和服务端能够安全可靠地建立连接,在此期间双方会协商初始序列号以及其他必要的参数设定:
1. 客户端发起SYN请求报文给服务器表明想要建立新的对话通道;
2. 服务端回应ACK确认收到syn的同时附带自己的ISN(Initial Sequence Number),并将自身的SYN标志位置位表示愿意接受新链接;
3. 接着客户再次回传acknowledge message作为最终的认可证明,此时正式开启双向交流模式。
```cpp
// C++代码片段展示如何通过socket库构建基本tcp server
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int sockfd;
struct sockaddr_in servaddr;
// 创建监听套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
bind(sockfd, (struct sockaddr *)&servaddr,sizeof(servaddr));
listen(sockfd, LISTENQ);
while(true){
connfd = accept(sockfd, (struct sockaddr *) NULL, NULL);
// 处理来自client的新连接...
}
}
```
阅读全文
相关推荐

















