当前位置: 首页 > wzjs >正文

做视频的软件模板下载网站有哪些设计网站专题页包括那些项目

做视频的软件模板下载网站有哪些,设计网站专题页包括那些项目,郑州建网站公司,拖拽网站开发嵌入式Linux网络编程:UNIX Domain Socket进程间通信(IPC) 【本文代码已在Linux平台验证通过】 一、UNIX Domain Socket核心优势 1.1 本地IPC方案对比 特性UNIX Domain Socket管道(Pipe)消息队列(Message Queue)共享内存(Shared Memory)跨进…

嵌入式Linux网络编程:UNIX Domain Socket进程间通信(IPC)

【本文代码已在Linux平台验证通过】


一、UNIX Domain Socket核心优势

1.1 本地IPC方案对比

特性UNIX Domain Socket管道(Pipe)消息队列(Message Queue)共享内存(Shared Memory)
跨进程通信✔️✔️✔️✔️
双向通信✔️❌(半双工)✔️✔️
支持字节流/数据报✔️(SOCK_STREAM/DGRAM)
传输效率★★★★★★★★★★★★★★★★★★
资源占用

二、UNIX Domain Socket核心原理

2.1 地址结构

struct sockaddr_un {sa_family_t sun_family;        // AF_UNIXchar        sun_path[108];     // 套接字文件路径(如/tmp/my_socket)
};

2.2 通信流程

服务端 客户端 socket() bind() listen() socket() connect() accept() send() recv() close() close() 服务端 客户端

三、UNIX Domain Socket服务端实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>#define SOCKET_PATH "/tmp/unix_socket_example"  // 套接字文件路径
#define BUFFER_SIZE 128int main() {int server_fd, client_fd;struct sockaddr_un serv_addr, cli_addr;socklen_t cli_len = sizeof(cli_addr);char buffer[BUFFER_SIZE];// 1. 创建Unix域流式套接字if ((server_fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {perror("socket创建失败");exit(EXIT_FAILURE);}// 2. 配置地址结构memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sun_family = AF_UNIX;strncpy(serv_addr.sun_path, SOCKET_PATH, sizeof(serv_addr.sun_path)-1);// 3. 确保文件不存在unlink(SOCKET_PATH);// 4. 绑定套接字if (bind(server_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) {perror("绑定失败");close(server_fd);exit(EXIT_FAILURE);}// 5. 设置监听队列(最大5个等待连接)if (listen(server_fd, 5) == -1) {perror("监听失败");close(server_fd);exit(EXIT_FAILURE);}printf("服务端已启动,等待客户端连接...\n");// 6. 接受客户端连接if ((client_fd = accept(server_fd, (struct sockaddr*)&cli_addr, &cli_len)) == -1) {perror("接受连接失败");close(server_fd);exit(EXIT_FAILURE);}printf("客户端已连接: %s\n", serv_addr.sun_path);// 7. 通信循环while (1) {ssize_t num_bytes = recv(client_fd, buffer, BUFFER_SIZE, 0);if (num_bytes == -1) {perror("接收错误");break;} else if (num_bytes == 0) {printf("客户端断开连接\n");break;}buffer[num_bytes] = '\0';printf("收到消息: %s\n", buffer);// 构造响应char reply[BUFFER_SIZE];snprintf(reply, sizeof(reply), "服务端已接收 %zd 字节", num_bytes);if (send(client_fd, reply, strlen(reply), 0) == -1) {perror("发送失败");break;}}// 8. 清理资源close(client_fd);close(server_fd);unlink(SOCKET_PATH);  // 删除套接字文件return 0;
}

四、UNIX Domain Socket客户端实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>#define SOCKET_PATH "/tmp/unix_socket_example"
#define BUFFER_SIZE 128int main() {int sockfd;struct sockaddr_un serv_addr;char buffer[BUFFER_SIZE];// 1. 创建套接字if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {perror("socket创建失败");exit(EXIT_FAILURE);}// 2. 配置服务端地址memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sun_family = AF_UNIX;strncpy(serv_addr.sun_path, SOCKET_PATH, sizeof(serv_addr.sun_path)-1);// 3. 连接服务端if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) {perror("连接失败");close(sockfd);exit(EXIT_FAILURE);}printf("已连接到服务端\n");// 4. 通信循环while (1) {printf("输入消息(输入exit退出): ");fgets(buffer, BUFFER_SIZE, stdin);buffer[strcspn(buffer, "\n")] = '\0';if (strcmp(buffer, "exit") == 0) break;// 发送数据if (send(sockfd, buffer, strlen(buffer), 0) == -1) {perror("发送失败");break;}// 接收响应ssize_t num_bytes = recv(sockfd, buffer, BUFFER_SIZE, 0);if (num_bytes == -1) {perror("接收失败");break;}buffer[num_bytes] = '\0';printf("服务端响应: %s\n", buffer);}close(sockfd);return 0;
}

五、核心API详解

5.1 socket()

int socket(int domain, int type, int protocol);
参数UNIX Domain Socket专用配置
domainAF_UNIX(必须)
typeSOCK_STREAM(可靠字节流)或 SOCK_DGRAM(数据报)
protocol通常填0

5.2 bind()

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 关键点:绑定的sun_path需有目录写权限(嵌入式系统常用/tmp/var/run

5.3 connect()与accept()

  • 连接特性:无需三次握手,内核直接复制路径名

六、编译与测试

6.1 编译命令

# 服务端
gcc unix_server.c -o server -Wall -O2# 客户端
gcc unix_client.c -o client -Wall -O2

6.2 运行演示

# 终端1:启动服务端
$ ./server
服务端已启动,等待客户端连接...
客户端已连接: /tmp/unix_socket_example# 终端2:启动客户端
$ ./client
已连接到服务端
输入消息(输入exit退出): Hello UNIX Socket!
服务端响应: 服务端已接收 15 字节
输入消息(输入exit退出): exit

七、嵌入式场景优化建议

7.1 提升安全性

// 设置套接字文件权限(0600仅允许所有者访问)
chmod(SOCKET_PATH, S_IRUSR | S_IWUSR);

7.2 抽象命名空间

// 使用抽象套接字名(Linux特有)
serv_addr.sun_path[0] = '\0';  // 第一个字符为NULL
strncpy(serv_addr.sun_path+1, "my_abstract_socket", sizeof(serv_addr.sun_path)-2);

7.3 多客户端处理

// 使用epoll实现多路复用
struct epoll_event ev;
epoll_fd = epoll_create1(0);
ev.events = EPOLLIN;
ev.data.fd = server_fd;
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, server_fd, &ev);

八、常见问题排查

8.1 连接失败:Permission denied

# 检查套接字文件权限
ls -l /tmp/unix_socket_example
# 解决方案:
sudo chmod 777 /tmp/unix_socket_example

8.2 地址已在使用:Address already in use

# 强制删除残留套接字文件
rm -f /tmp/unix_socket_example

8.3 跨用户通信问题

  • 原因:Linux权限系统限制
  • 解决:设置用户组权限或使用sudo

扩展阅读
Linux Programmer’s Manual: unix(7) | POSIX IPC 标准 | Linux man-pages


通过本文,您可掌握UNIX Domain Socket在嵌入式Linux中的高效IPC实现方法。相比网络套接字,UDS在本地通信场景中性能更优、资源占用更少,非常适用于嵌入式设备的多模块协作!


文章转载自:

http://sOQCwVTU.Lysrt.cn
http://jYx6dEJf.Lysrt.cn
http://aO0e52eC.Lysrt.cn
http://swy02Tzn.Lysrt.cn
http://nQYSyDPq.Lysrt.cn
http://NsG2wIFG.Lysrt.cn
http://M9EI6zzo.Lysrt.cn
http://oCNQXwce.Lysrt.cn
http://qfZ1W8YX.Lysrt.cn
http://awfczylZ.Lysrt.cn
http://5EbUy5Qp.Lysrt.cn
http://BtK2jtC2.Lysrt.cn
http://c4tIg5We.Lysrt.cn
http://SvmMEH1M.Lysrt.cn
http://YsbhDJpG.Lysrt.cn
http://CkePHPjU.Lysrt.cn
http://L4krOapJ.Lysrt.cn
http://HNvB9YvI.Lysrt.cn
http://vUhAct8l.Lysrt.cn
http://PG0Qw2Cx.Lysrt.cn
http://2AmakRhX.Lysrt.cn
http://hkR60WB3.Lysrt.cn
http://OwtZiJT8.Lysrt.cn
http://tkkU1Jhf.Lysrt.cn
http://eVacZTZX.Lysrt.cn
http://L1QjPU3E.Lysrt.cn
http://PkHa7Gka.Lysrt.cn
http://lPpiRnKJ.Lysrt.cn
http://tWIwRq6E.Lysrt.cn
http://E1NuxAtm.Lysrt.cn
http://www.dtcms.com/wzjs/672833.html

相关文章:

  • 微信公众号平台及网站建设计划app软件开发用什么软件
  • 网站开发平台软件网店运营与管理
  • 漂亮的设计类图片网站响应式网站模板免费
  • 网站建设经营服务合同南京市网站建设公司
  • 网站优化需求表网站怎样做seo推广
  • 东莞seoseo优化排名东莞企业seo推广
  • 广告字体效果图在线制作广州网站优化快速提升网站排名
  • 宝山php网站开发培训一个app的开发流程
  • 滁州公司做网站网站建设图片按钮
  • 阜阳市重点工程建设局网站网站维护要学多久
  • dx网站是哪家公司做的网站建设实验报告手写
  • 门户网站维护怎么做农产品网络营销渠道
  • 自己做的网站怎么才能在百度上查找站长统计幸福宝网站统计
  • 好的网站制作平台网站建设-部署与发布的题目
  • 集团网站建设特点 互联网课堂平台设计是做什么
  • 那个网站的机票做便宜自己服务器做网站如何备案
  • 阿里云网站备案拍照点网站当地备案
  • 从广州回来需要隔离吗?整站网站优化推荐
  • 高水平高职院校 建设网站网上开店铺需要什么流程
  • 无锡企业如何建网站网站集约化建设项目内容
  • 上海青浦网站建设公司物流网络优化
  • 网站开发网页制作薪资建设什么网站可以上传视频
  • 在线阅读网站建设方案长沙有哪些做网站的
  • 葫芦岛建设网站石家庄城市建设档案馆网站
  • 电脑做服务器搭建网站最近一周的热点新闻
  • 什么网站做电子元器件网站建设背景及意义
  • 伍佰亿网站线上平面设计培训
  • google建站推广如何快速被百度收录
  • 涉密资质 网站建设沈阳制作网站
  • 网站建设方案范文2000字专业的定制型网站建设