线程之间的通信socketpair【学习笔记】【原创】
2024-09-04 02:29:46
平台信息:
内核:linux3.1.0
系统:android5.0
平台:tiny4412
作者:庄泽彬(欢迎转载,请注明作者)
说明: 韦老师的安卓视频学习笔记
一、在一个进程中多个线程如何进行通信,主要使用的是socketpair的机制,详细代码如下:
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h> #define SOCKET_BUFFER_SIZE (32768U)
#define BUF_MAX_LEN 512 void *function_thread (void *arg)
{
int fd = (int)arg;
char buf[BUF_MAX_LEN];
int cnt = ;
int len = -; while()
{
len = sprintf(buf,"Hello,main thread1, cnt = %d\r\n",cnt++);
write(fd,buf,len); len = read(fd,buf,BUF_MAX_LEN);
buf[len] = '\0';
printf("thead1 read:%s\r\n",buf); sleep();
} return NULL;
} int main(int argc,char **argv)
{
int ret = -;
int sockets[];
int bufferSize = SOCKET_BUFFER_SIZE;
pthread_t threadID;
char buf[BUF_MAX_LEN];
int len = ;
int cnt = ;
int fd = -; ret = socketpair(AF_UNIX,SOCK_SEQPACKET,,sockets);
if(ret){
printf("Error socketpair\r\n");
return -;
} setsockopt(sockets[], SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize));
setsockopt(sockets[], SOL_SOCKET, SO_RCVBUF, &bufferSize, sizeof(bufferSize));
setsockopt(sockets[], SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize));
setsockopt(sockets[], SOL_SOCKET, SO_RCVBUF, &bufferSize, sizeof(bufferSize)); ret = pthread_create(&threadID,NULL,function_thread,(void *)sockets[]); fd = sockets[]; while(){
len = read(fd,buf,BUF_MAX_LEN);
buf[len] = '\0';
printf("Main thread read:%s\r\n",buf); len = sprintf(buf,"Hello,thread1, cnt = %d\r\n",cnt++);
write(fd,buf,len);
} return ;
}
编译方法:gcc -o socketpair socketpair.c -lpthread
二、实验现象:
三、如下图所示socketpair的进程号为5919,在这个进程下面有两个线程运行。
最新文章
- 在EC2上搭建L2TP over IPSec VPN服务器
- Python + Selenium 实现登录Office 365
- 用Linq操作数据小记
- error-2016-2-15
- GMM算法k-means算法的比较
- POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”
- 如何使用数据库保存session的方法简介
- live555源码研究(四)------UserAuthenticationDatabase类
- HW3.16
- iOS开发-javaScript交互
- linux安装总结(亲测)
- springboot 1.5.2 thymeleaf 标签未关闭异常解决办法
- js先后对某个js对象内的两个属性排序
- IndexDB 操作util
- c# 动态绘制直线和曲线
- Linux 安装 JDK
- 启动eclipse弹出提示Version 1.7.0_79 of the JVM is not suitable for this product. Version: 1.8 or greater is required怎样解决
- 查找最大或最小的 N 个元素
- Go 程序的性能调试问题
- Appium环境搭建过程中遇到的问题及解决办法
热门文章
- LeetCode 467. Unique Substrings in Wraparound String
- php file_get_contents json_decode 输出为NULL
- ES6(Proxy 和 Reflect)
- tarjan 学习记
- 让Selenium稳定运行的技巧
- ZOJ 2478 Encoding
- Cow Exhibition (01背包)
- Archiving not possible: No primary destinations errors
- CodeForces - 592D Super M 题解
- [luoguP1849] [USACO12MAR]拖拉机Tractor(spfa)