请问LINUX进程间通讯采用什么方式?谢谢了。

kellychen 2003-12-31 01:54:16
谢谢了
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaassd 2004-01-02
  • 打赏
  • 举报
回复
mark
slippercat 2003-12-31
  • 打赏
  • 举报
回复
我贴篇:
进程间通讯


基本概念

管道

FIFO

System V 的 IPC 机制

共享内存

信号量

5.12.1 基本概念
为什么需要 IPC
原子操作, 死锁和竞态
同步
5.12.2 管道
最常见的 IPC 机制
通过 pipe 系统调用
===============================================================================
#include <unistd.h>

int pipe(int filedes[2]);
------------------------------------------------------------------------------
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

#define MAXLINE 256

void err_sys (const char* info)
{
perror (info);
exit (1);
}

int mian (void)
{
int n, fd [2];
pid_t pid;
char line [MAXLINE];

if (pipe (fd) < 0)
err_sys ("pipe error");

if ( (pid = fork ()) < 0)
err_sys ("fork error");
else if (pid > 0) { // parent
close (fd [0]);
write (fd [1], "hello world\n", 12);
}
else { // child
close (fd [1]);
n = read (fd[0], line, MAXLINE);
write (STDOUT_FILENO, line, n);
}

exit (0);
}

===============================================================================

数据要经过内核传递, 效率较低
只能在关系进程之间进行, 比如父子进程之间
管道是单工的
5.12.3 FIFO
FIFO 又称作命名管道
FIFO 是存在于文件系统的对象, 用 "mknode <name> p", 或 mkfifo (1, 3) 命令或函数建立
通过 FIFO 的通讯可发生在任何两个进程之间, 只要对 FIFO 有适当的访问权限
对 FIFO 的读写操作与普通文件类似
用 FIFO 实现的 C/S 结构
5.12.4 System V 的 IPC 机制
消息传递
共享内存: 效率最高的 IPC 机制, 但没有同步机制
信号量: 实际是一种同步机制, 通常与共享内存一起使用
标识符和键
===============================================================================
* 标识符用来标识 IPC 对象.
* 利用 msgget, semget, shmget 等函数建立 IPC 对象时, 必须指定键. 指定建为
IPC_PRIVATE 时, 可建立新的 IPC 对象.
* 作为服务器的进程建立新的 IPC 对象之后, 可将返回的标识符写入一个预先约定
的文件, 从而可让客户获得标识符; 或者, 在关系进程之间, 可通过命令行参数
传递标识符.
* 两个进程可约定同一个键, 比如通过共同的头文件, 服务器负责事先建立新 IPC 对象,
客户只许通过键获得标识符.
* 两个进程可通过 ftok 函数生成键. 该函数利用一个文件名和项目 ID 工作.
===============================================================================
ipcs 可用来管理系统中的 IPC 对象

5.12.5 共享内存
parsees 2003-12-31
  • 打赏
  • 举报
回复
管道、消息、共享内存、邮箱都有。
yudang 2003-12-31
  • 打赏
  • 举报
回复
这么高深啊
呵呵,网络编程确实是个很有乐趣的东东
fierygnu 2003-12-31
  • 打赏
  • 举报
回复
买本《UNIX网络编程》第二卷吧。
HostOOP 2003-12-31
  • 打赏
  • 举报
回复
管道、共享内存、消喜队列。如果安排得好的话,使用普通文件也可以实现进程间的信息交换。
love_vc 2003-12-31
  • 打赏
  • 举报
回复
管道、共享内存、消息
kellychen 2003-12-31
  • 打赏
  • 举报
回复
我只知道用管道可以,还有什么方式嘛?哪里有这方面的资料?
谢谢了

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧