91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[Linux管道和IPC]管道的實際應用2

發布時間:2020-08-03 14:47:28 來源:網絡 閱讀:346 作者:銀河星君 欄目:編程語言
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <limits.h>
#include <string.h>
#include <sys/wait.h>
#include <error.h>

#define DEF_PAGER "/bin/more"   //定義處理函數
#define MAXLINE  4096   //行最大字符數

int main(int argc, char *argv[])
{
  int     n;
  int     fd[2];
  pid_t   pid;
  char    *pager, *argv0;
  char    line[MAXLINE];
  FILE    *fp;
  if (argc != 2)  //如果參數不正確
  {
    printf("請輸入正確的命令:<pathname>\n");
    exit(1);
  }
  if ((fp = fopen(argv[1], "r")) == NULL)  //如果以只讀打開argv[1]指向的文件出錯
  {
    printf("不能打開文件%s", argv[1]);
    exit(1);
  }
  if (pipe(fd) < 0)  //創建管道失敗
  {
    printf("創建管道失敗\n");
    exit(0);
  }
  if ((pid = fork()) < 0)  //創建子進程失敗
  {
    printf("創建子進程失敗\n");
    exit(0);
  }
  else if (pid > 0)
  {                               //父進程
    close(fd[0]);           //關閉讀文件描述符
    //將argv[1]通過管道發送
    while (fgets(line, MAXLINE, fp) != NULL)
    {
      n = strlen(line);
      if (write(fd[1], line, n) != n)
      {
        printf("寫管道失敗\n");
        exit(1);
      }
    }
    if (ferror(fp))  //如果文件描述符出錯
    {
        printf("fgets 失敗\n");
        exit(1);
    }
    close(fd[1]);   //
    if (waitpid(pid, NULL, 0) < 0)
    {
        printf("waitpid失敗\n");
        exit(1);
    }
    exit(0);
  }
  else  //子進程
  {
    close(fd[1]);
    if (fd[0] != STDIN_FILENO)
    {
      if (dup2(fd[0], STDIN_FILENO) != STDIN_FILENO)
      {
        printf("dup2到標準輸入失敗\n");
        exit(1);
      }
      close(fd[0]);   /* don't need this after dup2 */
    }
    //exec函數的參數
    if ((pager = getenv("PAGER")) == NULL)
    {
      pager = DEF_PAGER;
    }
    if ((argv0 = strrchr(pager, '/')) != NULL)
    {
      argv0++;
    }
    else
    {
      argv0 = pager;
    }
    if (execl(pager, argv0, (char *)0) < 0)
    {
      printf("調用execl失敗%s", pager);
      exit(1);
    }
  }
  exit(0);
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林甸县| 宝山区| 临安市| 丰都县| 凤台县| 华亭县| 丰镇市| 中牟县| 高邮市| 个旧市| 城口县| 周至县| 乾安县| 仁布县| 辽阳县| 荆门市| 中超| 观塘区| 乌拉特后旗| 衢州市| 崇阳县| 津市市| 海丰县| 潼南县| 尉氏县| 新巴尔虎右旗| 乌鲁木齐市| 奎屯市| 尼勒克县| 桂林市| 临海市| 通渭县| 项城市| 疏勒县| 蒙自县| 伊金霍洛旗| 东平县| 东城区| 宁波市| 涿鹿县| 公主岭市|