|
以下程序测试非命名管道:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#define error(x) {perror(x);exit(-1);}
int jump(command1,command2)
char *command1[],*command2[];
{
int pfd[2];
int pid;
//char *mesg;
//FILE *fp;
if(pipe(pfd)==-1)
error("pipe");
if((pid=fork())==-1)
error("fork");
else if(pid==0)
{
close(1);
dup(pfd[1]);
close(pfd[0]);
close(pfd[1]);
execvp(command1[0],command1);
error("execvp 1");
}
else
{
wait(NULL);
close(0);
dup(pfd[0]);
close(pfd[0]);
close(pfd[1]);
execvp(command2[0],command2);
error("execvp 2");
}
}
main()
{
static char *command1[]={"ls","-al",(char *)0};
static char *command2[]={"sort"};
if(jump(command1,command2)!=0)
{
fprintf(stderr,"JumpPipe Error\n");
exit(1);
}
exit(0);
}
这个程序的作用是将当前日录下的文件按照文件的大小顺序排列打印出来。
将子进程的输出由原来的标准输出重定向到管道的写端口,并将父进程的输入从原来
的标准输人重定向到管道的读端口.
我用gcc-2.95.3-5编译无法通过,但将jump函数中的第一个else去掉后编译就通过了.
我也测试了下面的的这个程序,gcc-2.95.3-5是可以通过的
#include <stdio.h>
main()
{
if(0)
putchar('1');
if(0)
putchar('2');
else if(0)
{
putchar('3');
putchar('3');
}
else
{
putchar('4');
putchar('4');
}
exit(0);
}
大家看看是什么问题 |
|