2 l309618485 l309618485 于 2016.03.21 20:36 提问

匿名管道阻塞,ReadFile处就不动了

#include
#include
main()
{
HANDLE read=NULL,write=NULL;
SECURITY_ATTRIBUTES ss;
STARTUPINFO sa={0};
PROCESS_INFORMATION pp={0}; //定义结构体SECURITY_ATTRIBUTES变量
char text[]="匿名管道程序测试!";
DWORD writetext;
ss.nLength=sizeof(ss); //填充结构体中的各成员
ss.lpSecurityDescriptor=NULL;
ss.bInheritHandle=TRUE;
if(CreatePipe(&read,&write,&ss,0)) //创建匿名管道
{
printf("创建匿名管道成功\r\n"); //定义并初始化结构体
sa.cb=sizeof(sa); //填充结构体中的各个成员
sa.dwFlags=STARTF_USESHOWWINDOW;
sa. hStdInput=read;
sa. hStdOutput=write;
sa. hStdError= GetStdHandle(STD_ERROR_HANDLE);
sa.wShowWindow=SW_MAXIMIZE;
if(::CreateProcess(NULL,"子进程.exe",NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,NULL,&sa,&pp))
{
printf("创建子进程成功\r\n");
WriteFile(write,text,sizeof(text),&writetext,NULL);
printf("通过匿名管道写入数据成功\r\n");
}
else
{
printf("创建子进程失败\r\n");
}
}
}

#include
#include
main()
{
HANDLE read=NULL;
char text[100]="匿名管道程序测试!";
DWORD readtext;
read=GetStdHandle(STD_INPUT_HANDLE);
if(ReadFile(read,text,100,&readtext,NULL)==0)
{
printf("从匿名管道中读取的数据是:%s\r\n",text);
}
Sleep(10000);
return 0;
}

2个回答

oyljerry
oyljerry   Ds   Rxr 2016.03.21 20:59
已采纳

管道中有没有填入数据。阻塞的时候是不是没有读取任何数据

l309618485
l309618485 服务端不是填入了吗?char text[]="匿名管道程序测试!"; 上面有个错误客户端的是char text[100] = {0};
2 年多之前 回复
l309618485
l309618485 服务端不是填入了吗?char text[]="匿名管道程序测试!"; 上面有个错误客户端的是char text[100] = {0};
2 年多之前 回复
l309618485
l309618485   2016.03.21 21:44

ReadFile 后面的不运行

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于匿名管道阻塞的疑问 [问题点数:20分,结帖人hhh_hao] http://bbs.csdn.net/topics/310166627/http://bbs.csdn.net/topics/31
大家好, 我现在用匿名管道做进程间的通信, 我知道往空的管道中读数据,或往满的管道中写数据,都会造成阻塞。 有没有办法避免这个问题呢,查了一些资料, 发现可以在读的时候先调用PeekNamedPipe()看是否有数据, 那WriteFile的时候怎么解决呢,有什么函数查看管道是否满的吗? 希望有经验的高手帮我解决下这个难题,非常感激。 匿名管道不允许异步操作,所以如在一个
防止读匿名管道的无限阻塞问题的方法
假设程序维护一个匿名管道,fd[0]读端,fd[1]写端。父进程从管道中读数据,子进程循环读取一个文件并将读到得到内容写入管道。 这时如果不注意的话,很容易出现读管道的无限阻塞。 读管道如下 nread = read(fd[0],buffer,size); 当父进程 向管道中写入最后数据时,最后一次写入的数据可能比size小,也就是管道中的数据少于size。这时我的程序出现了read()一直
管道piep使用ReadFile读取阻塞问题解决
0x01.CreatePipe管 道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另 一进程就可以从管道的另一端将其读取出来。匿名管道(Anonymous Pipes)是在父进程和子进程间单向传输数据的一种未命名的管道,只能在本地计算机中使用,而不可用于网络间的通信。BOOL WINAPI CreatePi
进程通信之二 管道技术第二篇 匿名管道
上一篇《进程通信之二 管道技术第一篇 输入输出的重定向》示范了增加若干程序代码来完成程序输入输出的重定向,并提出了如果没有程序源代码,只有程序文件如何来完成重定向。本篇就介绍如何使用匿名管道来完成这一任务。 计算机中管道pipe类似于现实世界中的水管道,在一端放入水流,另一端就会流出来。在计算机机中水流自然被数据流所代替了。计算机中管道分为匿名管道和命名管道,本篇将主要介绍用匿名管道来完成这一重定
VC网络编程笔记--进程间通信-匿名管道
VC网络编程笔记--进程间通信-匿名管道
ReadFile异步读设备
#include #include int main (void) { HANDLE hDevice=CreateFile(TEXT("C:\\1.txt"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, ///此处设置F
匿名管道的四种情况
匿名管道的4种情况: 1.如果所有指向管道写端的文件描述符都关闭了(管道写端的引用计数等于0),而仍有进程从管道的读端读取数据,那么管道中剩余的数据都被读取后,再次read会返回0,就像读到文件末尾一样。 1 #include <sys/types.h> 2 #include <sys/w
串口阻塞读写的局限性
在阻塞读时,写串口需要不定长的时间(有时零点几秒,有时几秒),估计原因是串口的读和写不能同时进行。经跟踪测试,有以下结论:在某线程阻塞读串口时串口资源完全被占用,此时在另一线程中进行写操作也将阻塞(原因:使用同一资源,ReadFile/WriteFile在操作系统底层进行同步锁定),直到读操作因为超时返回,才能进行其它的串口操作,如串口写操作。
管道读写的阻塞与非阻塞
在管道文件为阻塞读和阻塞写的时候,无论是先读还是先写都要等到另一个操作才能离开阻塞,也就是: 如果先读,陷入阻塞,等待写操作;如果先写,陷入阻塞,等待读操作。 而非阻塞读和非阻塞写,是无须等待另一个操作的,直接执行read()或者write()能读就读,能写就写,不能就返回-1,非阻塞读写主要是用于自己循环读取,去判断读写的长度 在使用非阻塞的时候,有一个很需要注意的地方,在fifo的man
利用匿名管道实现CMD回显
<br />SECURITY_ATTRIBUTES sa;<br /> HANDLE hRead,hWrite;<br />   <br /> sa.nLength = sizeof(SECURITY_ATTRIBUTES);  <br /> sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符  <br /> sa.bInheritHandle = TRUE; //创建的进程继承句柄<br /> if (!CreatePipe(&hRead,&hWrite,&sa,