java linuc进程间通信对照
java linuc进程间通信对比
读《unix网络编程第二卷进程通信》
1.管道
2.消息队列
3.信号量
4.共享内存
这些在java中怎么实现?
如果是管道,参考http://www.iteye.com/topic/156804,看下面代码,
注意把“注意这里!!!!!!!!”的i换成256实验一下效果
如果是c里面
看unpv22e/pipe/mainpipe.c
-------------------------------------
共享内存参考http://coach.iteye.com/blog/738214
读《unix网络编程第二卷进程通信》
1.管道
2.消息队列
3.信号量
4.共享内存
这些在java中怎么实现?
如果是管道,参考http://www.iteye.com/topic/156804,看下面代码,
注意把“注意这里!!!!!!!!”的i换成256实验一下效果
import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; public class CommunicateWhitPiping { public static void main(String[] args) { PipedOutputStream pos = new PipedOutputStream(); PipedInputStream pis = new PipedInputStream(); try { pos.connect(pis);//将管道输入流与输出流连接 此过程也可通过重载的构造函数来实现 } catch (IOException e) { e.printStackTrace(); } Producer p = new Producer(pos);//创建生产者线程 Consumer c = new Consumer(pis);//创建消费者线程 p.start();//启动线程 c.start(); } } class Producer extends Thread {//生产者线程(与一个管道输入流相关联) private PipedOutputStream pos; public Producer(PipedOutputStream pos) { this.pos = pos; } public void run() { int i = 99;//256,257,注意这里!!!!!!!! try { pos.write(i); } catch (IOException e) { e.printStackTrace(); } } } class Consumer extends Thread {//消费者线程(与一个管道输入流相关联) private PipedInputStream pis; public Consumer(PipedInputStream pis) { this.pis = pis; } public void run() { try { System.out.println(pis.read()); } catch (IOException e) { e.printStackTrace(); } } }
如果是c里面
看unpv22e/pipe/mainpipe.c
#include "unpipc.h" void client(int, int), server(int, int); int main(int argc, char **argv) { int pipe1[2], pipe2[2]; pid_t childpid; Pipe(pipe1); /* create two pipes */ Pipe(pipe2); if ( (childpid = Fork()) == 0) { /* child */ Close(pipe1[1]); Close(pipe2[0]); server(pipe1[0], pipe2[1]); exit(0); } /* 4parent */ Close(pipe1[0]); Close(pipe2[1]); client(pipe2[0], pipe1[1]); Waitpid(childpid, NULL, 0); /* wait for child to terminate */ exit(0); }
-------------------------------------
共享内存参考http://coach.iteye.com/blog/738214