重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
管道是一种进程间通信机制,好比一个管子,一边一个口,一个往里放,另一头可以往出取,操作是双向的
成都创新互联专注于嘉黎企业网站建设,响应式网站设计,商城网站建设。嘉黎网站建设公司,为嘉黎等地区提供建站服务。全流程定制开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
windows也有这样的东西Pipe
提示的意思是因为没有程序或其他服务使用netlogon服务,所以系统为了安全起见,自动将netlogon服务关闭了。这是正常现象,并不是无法启动。Netlogon服务为域控制器注册所有的srv资源纪录。这些记录出现在DNS服务器的正向查询区域你的域名中的_msdcs,_sites,_tcp,and_udp等文件夹中。其他计算机利用这些记录查询域活动目录相关的信息。“网络登录”系统服务维护计算机和域控制器之间的安全通道,对用户和服务进行身份验证。它将用户的凭据传递给域控制器,然后返回用户的域安全标识符和用户权限。这通常称为pass-through身份验证。“网络登录”被配置为仅在成员计算机或域控制器加入域时自动启动。在Windows2000Server系列和WindowsServer2003系列中,“网络登录”发布DNS中的服务资源定位器记录。当此服务运行时,它依赖“服务器”服务和“本地安全机构”服务来侦听传入的请求。在域成员计算机上,“网络登录”使用命名管道上的RPC。在域控制器上,它使用命名管道上的RPC、RPCoverTCP/IP、邮筒以及轻型目录访问协议(LDAP)。简单的说,你的机器如果不是域控制器或者dns服务器,没有必要起netlogon服务,你强行启动,系统为了安全也会马上自动关闭。
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
"命名管道"或"命名管线"(Named Pipes)是一种简单的进程间通信(I P C)机制, Microsoft Windows NT,Windows 2000,Windows 95以及Windows 98均提供了对它的支持 (但不包括Windows CE).命名管道可在同一台计算机的不同进程之间,或在跨越一个网络的 ...
首先, 需要说明的是我对linux也不熟悉, 但用fork创建进程还是知道的.
对于windows程序员来说, 这段代码肯定比较难以理解了. 但linux则不同
在Linux下,当用fork创建进程的时候, 子进程是拷贝父进程的一个拷贝(这样的话可以避免传递很多的参数,
你用下windows的CreateProcess函数就会知道创建新进程有多麻烦了), 当然这也包括代码段了.
因此, 父进程会执行if-else而子进程同样会执行if-else, 区别它们的就是fork的返回值. 子进程由于
函数返回值是0所以会执行if() {}后的代码段, 而父进程则执行else{}代码段.
注: 父进程的fork返回子进程的pid(肯定大于0的), 子进程的fork返回0
父进程使用wait函数进行同步, 等待子进程结束(返回)后, 再执行后面的read(....代码段.
这是我从别处看到的:
子进程继承父进程这些东西:
用户id
控制终端
当前工作目录
根目录
文件方式创建屏蔽字
信号屏蔽和排列
对任一打开文件描述符的在执行时关闭标志
环境
连接的共享存储段。
资源限制
你代码里有不少的全角字符, 帮你改一下:
#include stdio.h
int main()
{
int x, fd[2];
char buf[30], s[30];
pipe(fd); /*创建管道*/
while((x=fork())==-1); /*创建子进程失败时,循环*/
if(x==0)
{
sprintf(buf, "This is an example\n");
write(fd(1), buf, 30); /*把buf中字符写入管道*/
exit(0);
}
else /*父进程返回*/
{
wait(0);
read(fd(0), s, 30); /*父进程读管道中字符*/
printf("%s", s);
}
return 0;
}