平台信息:
内核: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,在这个进程下面有两个线程运行。

最新文章

  1. 在EC2上搭建L2TP over IPSec VPN服务器
  2. Python + Selenium 实现登录Office 365
  3. 用Linq操作数据小记
  4. error-2016-2-15
  5. GMM算法k-means算法的比较
  6. POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”
  7. 如何使用数据库保存session的方法简介
  8. live555源码研究(四)------UserAuthenticationDatabase类
  9. HW3.16
  10. iOS开发-javaScript交互
  11. linux安装总结(亲测)
  12. springboot 1.5.2 thymeleaf 标签未关闭异常解决办法
  13. js先后对某个js对象内的两个属性排序
  14. IndexDB 操作util
  15. c# 动态绘制直线和曲线
  16. Linux 安装 JDK
  17. 启动eclipse弹出提示Version 1.7.0_79 of the JVM is not suitable for this product. Version: 1.8 or greater is required怎样解决
  18. 查找最大或最小的 N 个元素
  19. Go 程序的性能调试问题
  20. Appium环境搭建过程中遇到的问题及解决办法

热门文章

  1. LeetCode 467. Unique Substrings in Wraparound String
  2. php file_get_contents json_decode 输出为NULL
  3. ES6(Proxy 和 Reflect)
  4. tarjan 学习记
  5. 让Selenium稳定运行的技巧
  6. ZOJ 2478 Encoding
  7. Cow Exhibition (01背包)
  8. Archiving not possible: No primary destinations errors
  9. CodeForces - 592D Super M 题解
  10. [luoguP1849] [USACO12MAR]拖拉机Tractor(spfa)