CBuilder中使用管道技术实例

原创 2003年07月02日 15:59:00

废话不多说,大家来看代码

bool __fastcall TForm1::RunCmd(AnsiString cmd,TStringList *stringlist)
{
    TMemoryStream *memstream=new TMemoryStream();
    AnsiString rn="//r//n";
    PROCESS_INFORMATION proc;
    STARTUPINFO start;
    SECURITY_ATTRIBUTES sa;
    long ret;
    unsigned long lngBytesread;
    HANDLE hReadPipe,hWritePipe;
    char *strBuff=(char *)malloc(256);
    if(strBuff==NULL)
    {
        return false;
    }
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.bInheritHandle=true;
    sa.lpSecurityDescriptor=NULL;
    ret=CreatePipe(&hReadPipe,&hWritePipe,&sa,0);
    if(ret==0)
    {
        //创建管道失败
        return false;
    }
    memset(&start,0x00,sizeof(STARTUPINFO));
    start.cb=sizeof(STARTUPINFO);
    start.dwFlags=STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    start.hStdOutput=hWritePipe;
    start.hStdError=hWritePipe;
    bool retc=CreateProcess(NULL,cmd.c_str(),NULL,NULL,true, 0, 0, NULL, &start, &proc);
    if(!retc)
    {
        return false;
    }
    CloseHandle(hWritePipe);
    unsigned long len;
    memstream->Position=0;
    while(true)
    {
        memset(strBuff,0x00,256);
        GetFileSize(hReadPipe,&len);
        ret = ReadFile(hReadPipe, strBuff, 256, &lngBytesread,NULL);
        if(ret==0)
        {
            break;
        }
        else
        {
            memstream->Write(strBuff,lngBytesread);
        }
    }
    CloseHandle(proc.hProcess);
    CloseHandle(proc.hThread);
    CloseHandle(hReadPipe);
    memstream->Position=0;
    free(strBuff);
    stringlist->LoadFromStream(memstream);
    memstream->Clear();
    delete memstream;
    return true;
}

以上为一个使用管道获取命令行模式的程序的运行结果的函数。

使用代码

TStringList *StrList=new TStringList;
AnsiString strcmd;

RunCmd(strcmd,StrList);

结果保留再StrList中。

 

Redis管道技术使用总结

Redis服务是一种C/S模型,提供请求-响应式协议的TCP服务,所以当客户端请求发出,服务端处理并返回结果到客户端,一般是以阻塞形式等待服务端的响应,但这在批量处理连接时延迟问题比较严重,所以Red...
  • why_2012_gogo
  • why_2012_gogo
  • 2016年04月27日 13:13
  • 5355

PB使用数据管道实现数据的自动迁移和备份

使用数据管道实现数据的自动迁移和备份 摘要:针对MIS系统的开发和使用过程中数据的备份和迁移问题,提出了解决问题的基本思路和方案,详细阐述了方案实施过程中涉及的方法和技巧,并对使用PowerBuil...
  • linybo
  • linybo
  • 2014年04月13日 22:38
  • 1627

Java流编程实例之四--管道流

5. 管道流管道流是用来在多个线程之间进行信息传递的Java流,被号称是最难使用的流,被使用的频率也非常低。但事实上,管道流是非常有用的,它提供了多线程间信息传输的一种有效手段。 管道流包括两个类P...
  • LogicTeamLeader
  • LogicTeamLeader
  • 2016年09月16日 19:56
  • 2232

CBuilder技术专题

  • 2010年08月31日 17:31
  • 561KB
  • 下载

CBuilder核心编程技术

  • 2008年12月31日 11:19
  • 1.95MB
  • 下载

一起talk C栗子吧(第九十回:C语言实例--使用管道进行进程间通信三)

各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的例子,这一回咱们说的例子是:使用管道进行进程间通信,不过使用管道的方式不相同。闲话休提,言归正转。让我们一起talk C栗子吧!...
  • talk_8
  • talk_8
  • 2016年01月04日 22:54
  • 1496

Linux管道pipe使用实例

函数 #include int pipe(int filedes[2]); 描述 pipe()函数创建一个管道和指向该管道的一对文件描述符,并且将文件描述符存储到文件描述符数组filedes...
  • batoom
  • batoom
  • 2012年03月23日 16:37
  • 5335

一起talk C栗子吧(第八十九回:C语言实例--使用管道进行进程间通信二)

各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的例子,这一回咱们说的例子是:使用管道进行进程间通信,不过使用管道的方式不相同。闲话休提,言归正转。让我们一起talk C栗子吧!...
  • talk_8
  • talk_8
  • 2016年01月03日 22:41
  • 1685

C#中使用命名管道进行进程通信的实例

1 新建解决方案NamedPipeExample 在解决方案下面新建两个项目:Client和Server,两者的输出类型均为“Windows 应用程序”。整个程序的结构如下图所示。     2...
  • tiana0
  • tiana0
  • 2014年03月01日 18:31
  • 7766

一起talk C栗子吧(第八十七回:C语言实例--使用管道进行进程间通信概述)

各位看官们,大家好,上一回中咱们说的是进程间通信的例子,这一回咱们说的例子是:使用管道进行进程间通信。闲话休提,言归正转。让我们一起talk C栗子吧!...
  • talk_8
  • talk_8
  • 2016年01月02日 19:42
  • 1518
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CBuilder中使用管道技术实例
举报原因:
原因补充:

(最多只允许输入30个字)