精华内容
下载资源
问答
  • Pipeline:创建管道-源码

    2021-03-05 09:07:26
    管道 创建管道
  • 摘要:VC/C++源码,系统相关,匿名管道 VC++ 匿名管道相关的测试小程序,这个测试小程序演示了如何读娶写入与创建管道实例,源码运行截图如上所示,直接用VC++编译即可生成测试程序。
  • Linux创建管道

    千次阅读 2014-08-26 19:03:53
    管道是两个进程的连接器,单向,一端作为输入。...创建管道函数 #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<wait.h> #include<errno.h> #inc...

    管道是两个进程的连接器,单向,一端作为输入。普通管道只能用于父子进程的进程间通信,命名管道可以实现不同进程间的通信。

    创建管道函数

     

     

    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<wait.h>
    #include<errno.h>
    #include<signal.h>
    #include <setjmp.h>
    
    #include<sys/types.h>
    #include<fcntl.h>
    #include<sys/stat.h>
    /*int pipe(int pipefd[2]);
      参数保存系统返回的描述符号,0读,1写
      返回0表示成功
      返回-1表示函数执行失败
      */
    /*首先创建了一个管道,然后创建了子进程,利用该管道从父进程向子进程发送信息。消息是程序的命令行参数,子进程收到父进程传送的消息后输出。*/
    /*本例里面每个文件描述符都被关闭了两次,是因为在多进程的环境下,一个有效的管道描述符在并发子进程时会将被所有进程共享的文件表里面的引用次数+1,这里的每一次
    都是将其引用计数-1在一个描述符的引用次数为0情况下才会真正的关闭一个描述符*/
    int main(int argc, char *argv[])
    {
        int pfd[2];	//保存管道的文件描述符
        pid_t cpid;//保存进程标示符
        char buf;//定义变量
        if(argc != 2)
        {
            fprintf(stderr,"Usage: %s <string>\n",argv[0]);//提示用法信息
            exit(0);
        }
        if (pipe(pfd) == -1)
        {
            perror("pipe");
            exit(EXIT_FAILURE);
        }
        cpid = fork();//创建进程
        if (cpid == -1)
        {
            perror("fork");
            exit(EXIT_FAILURE);
        }
        
        if (cpid == 0)//子进程
        {
            close(pfd[1]);//关闭写管道描述符
            while (read(pfd[0], &buf, 1) > 0)//管道循环读数据
                write(STDOUT_FILENO, &buf, 1);//输出读到数据
            
            write(STDOUT_FILENO, "\n", 1);//输出从管道里读取的数据
            close(pfd[0]);//退出子进程
            exit(EXIT_SUCCESS);
        }
        else
        {
            close(pfd[0]);//关闭文件描述符
            write(pfd[1], argv[1], strlen(argv[1]));//向管道写入命令行参数1
            close(pfd[1]);//关闭写管道描述符
            wait(NULL);//等待子进程退出
            exit(EXIT_SUCCESS);
        }
        return 0;
    }

     

     

     

     

     

    展开全文
  • Azure管道任务分步 为Azure DevOps创建管道任务
  • maya2018曲线创建管道

    2020-06-09 19:46:26
    maya2018曲线创建管道 b站视频链接https://www.bilibili.com/video/BV1di4y1s7FJ

    maya2018曲线创建管道

    b站视频链接https://www.bilibili.com/video/BV1di4y1s7FJ

    展开全文
  • 在蓝色海洋中创建管道 该存储库用于中的“教程。 本教程使用的应用 所基于的 相同。 因此,尽管这次,您将完全通过Blue Ocean构建相同的应用程序。 jenkins目录包含Blue Ocean将在教程中为您创建的Jenkinsfile ...
  • 如何创建管道——pipe

    千次阅读 2019-02-18 17:49:45
    我们用pipe()函数为他们创建管道,这样他们就可以通过管道来通信了。 为了演示方便我们只考虑: 子程序把数据发送到父进程中来的情况。因此要用管道把子进程的标准输出和父进程的标准输入连接起来 我们将用pipe()...

    我们有一个这样的场景:主程序希望与子程序进行通信。我们用pipe()函数为他们创建管道,这样他们就可以通过管道来通信了。
    为了演示方便我们只考虑:
    子程序把数据发送到父进程中来的情况。因此要用管道把子进程的标准输出和父进程的标准输入连接起来

    我们将用pipe()函数建立管道。每当我们打开数据流时,它都会加入描述符表。pipe()函数也是如此,它创建两条相连的数据流,并把它们加到描述符表中,然后只要我们往其中一条数据流中写数据,就可以从另一条数据流中读取。pipe()在描述符表中创建这两项时,会把它们的文件描述符存放在一个包含两个元素的数组中。

    int fd[2];  //文件描述符将保存在fd数组中。
    if(pipe(fd) == -1){
            fprintf(stderr,"Can't create the pipe!");
            exit(2);
    } 
    

    pipe()函数创建了管道,并返回了两个描述符:fd[0]用来从管道读数据,fd[1]用来向管道写数据。我们将在父、子进程中使用这两个描述符。

    我们通过一个实例来说明:
    aaa.c

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    void open_url(char *url);
    int main(){
            int fd[2];
            if(pipe(fd) == -1){ //创建管道,并把文件描述符保存在fd[0]和fd[1]中。
                    fprintf(stderr,"%s\n","Can't create the pipe!");
                    exit(1);
            }
            pid_t pid = fork();
            if(pid == -1){
                    fprintf(stderr,"%s\n","Can't fork process!");
                    exit(2);
            }
            if(!pid){ //能进这里,表示已在子进程中
                    dup2(fd[1],1); //把标准输出设为管道写入端
                    close(fd[0]); //因为子进程不会去读取管道,因此将读取端关闭
                    if(execl("bbb","bbb",NULL) == -1){
                            fprintf(stderr,"%s\n","Can't open subprocess");
                            exit(1);
                    }
            }
            //从这开始是属于父进程的
            dup2(fd[0],0);  //把标准输入设为管道读取端
            close(fd[1]);//因为父进程不会向子进程发数据,无需写入管道,因此将写入端关闭
            char line[255];
            while(fgets(line,255,stdin)){
                            open_url(line+1);
            }
            return 0;
    }
    void open_url(char *url){
            char launch[255];
            //sprintf(launch,"cmd /c start %s",url);  //在windows上打开网页
           // system(launch);
            sprintf(launch,"x-www-browser '%s' &",url);//在Linux上打开网页
            system(launch);
            //sprintf(launch,"open '%s'",url); //在Mac上打开网页
            //system(launch);
    }
    

    bbb.c

    #include <stdio.h>
    int main(){
            char line[255];
            fgets(line,255,stdin);
            printf("%s",line);
            return 0;
    }
    

    编译运行:

    ~/Desktop/MyC$ gcc aaa.c -o aaa
    ~/Desktop/MyC$ gcc bbb.c -o bbb
    ~/Desktop/MyC$ ./aaa
    |
    

    查进程信息:

    ~$ ps -ef
    UID        PID  PPID  C STIME TTY          TIME CMD
    wong     17525  5363  0 17:47 pts/1    00:00:00 ./aaa
    wong     17526 17525  0 17:47 pts/1    00:00:00 bbb
    

    输入地址按回车:

    ~/Desktop/MyC$ ./aaa
    http://www.baidu.com
    

    接着就会打开浏览器。

    管道是文件吗?这不一定。这取决于操作系统创建管道的方式,一般来说用pipe()创建的管道都不是文件。而创建基于文件的管道,通常叫做有名管道或FIFO文件(先进先出文件)。

    因为基于文件的管道有名字,所以两个进程只要知道管道的名字也能用它来通信,即使它们是非父子进程关系。要使用有名管道,可以通过使用mkfifo()系统调用来实现。如果不是通过文件来实现管道的话,那通常是用内存,数据写到内存某个位置,然后再从另一个位置读取。

    如果试图读取一个空的管道,也不会发生错误,因为程序会等待管道中出现东西。

    父进程是如何知道子进程结束的?
    其实,当子进程结束时,管道会关闭。fgets()将会收到EOF(End Of File,文件结束符) ,于是fgets()函数返回0,循环就结束了。

    另外,管道只能单向通信。但是可以通过创建两个管道,一个从父进程连接到子进程,另一个从子进程连接到父进程来实现双向通信 。

    谢谢阅读!

    展开全文
  • C语言创建管道实现进程间通信

    千次阅读 2017-10-21 11:34:55
    C语言创建管道实现进程间通信
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int runcmd( char* lpCmd )
    {
        char buf[2048] = {0};    //缓冲区
        DWORD len;
        HANDLE hRead, hWrite;    // 管道读写句柄
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        SECURITY_ATTRIBUTES sa;
        
        //ZeroMemory( buf, 2047 );
        sa.nLength = sizeof( sa );
        sa.bInheritHandle = TRUE;    // 管道句柄是可被继承的
        sa.lpSecurityDescriptor = NULL;
        
        // 创建匿名管道,管道句柄是可被继承的
        if( !CreatePipe( &hRead, &hWrite, &sa, 2048 ) )
        {
            printf( "管道创建失败!(%#X)\n", (unsigned int)GetLastError() );
            return 1;
        }
    
        ZeroMemory( &si, sizeof( si ) );
        si.cb = sizeof( si );
        si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
        si.wShowWindow = SW_HIDE;
        si.hStdError = hWrite;
        si.hStdOutput = hWrite;
    
        // 创建子进程,运行命令,子进程是可继承的
        if ( !CreateProcess( NULL, lpCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi ) )
        {
            printf( "创建进程失败!(%#x)\n", (unsigned int)GetLastError() );
            CloseHandle( hRead );
            CloseHandle( hWrite );
            return 1;
        }
        // 写端句柄已被继承,本地需要关闭,不然读管道时将被阻塞
        CloseHandle( hWrite );
        // 读管道内容,并显示
        while ( ReadFile( hRead, buf, 2047, &len, NULL ) )
        {
            printf( buf );
            ZeroMemory( buf, 2047 );
        }
        CloseHandle( hRead );
        return 0;
    }
    
    int main( int argc, char** argv )
    {
          char cmd[256];
          printf( "输入命令行:" );
          gets( cmd );
          runcmd( cmd );
          system( "pause" );
          return 0;
    }
    展开全文
  • 本示例说明如何使用Docker为Python项目中的不同步骤创建管道。 流水线中的几个步骤由不同的程序包表示。 在此示例中,我们创建了一个非常简单的管道: 下载一些数据, 预处理该数据, 处理数据 为了从我们的...
  • Filter可以快速的创建一个管道输入函数,Filter就相当于只有一个Process块的Function。 Filter关键词可以代替Function关键词来创建函数。但Filter创建的函数,只能是接收管道输入参数的参数,并且是接收块结构数据的...
  • angular创建管道

    千次阅读 2018-04-18 18:46:10
    1:ng g pipe pipe/multiple【目录/管道名称】
  • 从playerbin创建管道make_playerbin_pipeline()基于gst中的playbin元素,playbin元素在gstplaybin.c和gstdecodebin.c中执行。在playerbin中创建动态管道的确是个棘手的任务,我了解得也不很透彻,只能尽可能解释清楚...
  • 管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。匿名管道...
  • LINUX创建管道文件

    千次阅读 2019-10-09 05:28:15
    创建管道文件 mkfifo 1.pipe Makefile a:a.c b.c  gcc a.c -o a  gcc b.c -o b .PHONY:clean clean:  rm a b ...
  • 安卓系统中在jni中写mkfifo创建管道为什么不成功,返回值为-1.
  • 第一步创建管道文件:fifo.c #include #include #define PATH "/home/bencai/4-4/swap" int main(int *argc,char **argv) { int ret; ret=mkfifo(PATH,0644); if(ret!=0) { ...
  • 原文地址::... 相关文章 1、linux下为什么创建管道成功,打开管道却失败呢----https://zhidao.baidu.com/question/454079361.html 进程间通信之FIFO,在阻塞模式下,只有当读和
  • 文件内提供了相关的FLY文件和相应SHP文件,FLY文件不能够运行的话可以自己创建FLY。我用的是VS2017和TerraExplorer Pro6.6.1.
  • VC++ 创建管道

    千次阅读 2009-11-05 16:49:00
    void CDlgTestDlg::OnBnClickedOk(){ SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; sa.nLength=sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle=TRUE; if(!CreatePipe(&hRead,&hWrite,&sa,0))
  • 詹金斯管道码头工人 Phpmyadmin与MySQL docker撰写文件
  • 标准 I/O 库提供了两个函数popen 和 pclose 函数,这两个函数实现的操作是:创建一个管道,调用 fork 创建一个子进程,关闭管道的不使用端,执行一个 shell 以运行命令,然后等待终止。 API /* popen 和 pc
  • Revit二次开发--创建管道

    千次阅读 2018-12-29 17:20:59
    下面是使用第三种重载方法创建的一条立管: public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uiDoc = commandData.Application....
  • _popen, _wpopen这是C运行库(当然 popen函数为Linux C) ...首先用popen打开一个命令行的管道,然后通过fgets获得该管道传输的内容,也就是命令行运行的结果 一、_函数介绍 1._popen FILE *_popen
  • /*创建管道*/ if(pipe(pipe_fd))

    千次阅读 2012-09-28 10:50:45
    #include #include #include #include #include #include int main() { int pipe_fd[2]; pid_t pid; char buf_r[100]; char* p_wbuf; int r_num; memset(buf_r,0,sizeof(buf_r))... /*创建管道*/ if(pi
  • 在Revit2013里面,当我们用NewPipe创建完成一个管道后,若这个管断是独立的没有与其它已经具有系统类型的管道或终端设备连接,这个管段的系统类型属性是没有定义的。通过编程也无法赋予系统类型。 这个问题已经办法...
  • 转自http://hi.baidu.com/bzlixinhui/item/3f8d53c2633aee05c610b26e 第一步创建管道文件:fifo.c #include #include #define PATH "/home/bencai/4-4/swap" int main(int *argc,char **argv) { int
  • _popen,_wpopen这是C运行库(当然popen函数为Linux C) CreatePipe function这是API函数 system函数可以运行命令行,并不能获得显示结果,执行结果则是通过...首先用popen打开一个命令行的管道,然后通过fgets获...
  • 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以 运行命令 来开启一个进程。 type   参数只能是读或者写中的一种,得到的返回值(标准 I/O 流)也具有和 type 相应的只读或只写类型...
  • C++的创建命名管道(CreateNamedPipe)

    千次阅读 2020-06-20 10:54:45
    管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。 匿名管道...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 266,412
精华内容 106,564
关键字:

创建管道