pipe.c
来自「操作系统SunOS 4.1.3版本的源码」· C语言 代码 · 共 82 行
C
82 行
#ifndef lintstatic char sccsid[] = "@(#)pipe.c 1.1 92/07/30 Copyr Sun Micro";#endif/* * Copyright (c) 1985 by Sun Microsystems, Inc. */#include "defs.h"#include <sys/wait.h>/* close the pipe */close_pipe(){ close(cf_fd); close(to_fd);}start_canfield(){ int i; union wait status; while (wait3(&status, WNOHANG, 0) > 0) continue; if (pipe(to) < 0) { perror("canfieldtool: pipe to"); exit(1); } if (pipe(from) < 0) { perror("canfieldtool: pipe from"); exit(1); } ppid = getpid(); if ((pid = fork()) < 0) { perror("canfieldtool: fork"); exit(1); } if (pid == 0) { /* child */ if (dup2(to[0], 0) < 0) { perror("canfieldtool: dup2 to"); kill(ppid, 9); exit(1); } if (dup2(from[1], 1) < 0) { perror("canfieldtool: dup2 from"); kill(ppid, 9); exit(1); } for (i = 3; i < 31; i++) close(i);#ifdef DEBUG if (execl("/usr/troika/jsc/cftool/src/Canfield/canfield", "canfield", 0)) { /* * should never happen, because it shouldn't * return from the execl */ fprintf(stderr, "tool: execl of jsc canfield worked\n"); exit(1);#else if (execl(canfield, canfield, 0)) { /* * should never happen, because it shouldn't * return from the execl */ fprintf(stderr, "tool: execl worked\n"); exit(1);#endif } else { perror("canfieldtool: execl failed"); kill(ppid, 9); exit(1); } } if (close(to[0]) < 0) { perror("canfieldtool: close to"); exit(1); } if (close(from[1]) < 0) { perror("canfieldtool : close from"); exit(1); } to_fd = to[1]; return from[0];}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?