回覆列表
  • 1 # 使用者834195712159

    程式碼示例:

    #include <stdio.h>

    #include <unistd.h>

    #include <fcntl.h>

    #define READ_TERMINAL 0

    #define WRITE_TERMINAL 1

    int main() {

    int file_descriptors[2];

    pid_t pid_f;

    char PipeBuf[64]={‘a’,‘0’};

    int read_ret=0;

    pipe(file_descriptors);

    pid_f=fork();

    if (pid_f<0)

    {

    printf(“fork error!\n”);

    exit(1);

    }

    else if (pid_f==0)

    {

    //子程序向父程序發一則訊息

    printf(“Write in Pipe To FatherProcess!\n”);

    close(file_descriptors[READ_TERMINAL]);

    sleep(1);

    write(file_descriptors[WRITE_TERMINAL],“Child Send”,sizeof(“Child Send”));

    //open(file_descriptors[READ_TERMINAL]);

    }

    else

    {

    //父程序接收(讀取)訊息

    printf(“Read in Pipe From ChildProcess!\n”);

    //透過fcntl()修改為使得讀管道資料具有非阻塞的特性

    int flag=fcntl(file_descriptors[READ_TERMINAL],F_GETFL,0);

    flag |= O_NONBLOCK;

    if(fcntl(file_descriptors[READ_TERMINAL],F_SETFL,flag) < 0){

    perror(“fcntl”);

    exit(1);

    }

    close(file_descriptors[WRITE_TERMINAL]);

    read_ret=read(file_descriptors[READ_TERMINAL],PipeBuf,sizeof(PipeBuf));//沒阻塞的讀

    printf(“Read Message are : %s\n”,PipeBuf);

  • 中秋節和大豐收的關聯?
  • 僨怒小鳥的本領一一各和鳥有個種特長,我不知?