我正在做一个涉及管道和exec的简单分配,这是代码。
#include <apue.h>
#include <stdio.h>
int main(void){
int out[2];
pipe(out);
char file1[1024],file2[1024];
int pid=fork();
if(pid>0){
close(out[0]);
scanf("%s",file1);
scanf("%s",file2);
write(out[1],file1,strlen(file1));
//write(out[1],"\0",1);
write(out[1],file2,strlen(file2));
}
if(pid==0){
int c;
int cnt=0;
close(out[1]);
read(out[0],file1,1024);
read(out[0],file2,1024);
execlp("sort","sort",file1,NULL);
return 0;
}
}
问题是,execlp函数找不到排序二进制文件,
我也用execl给出了完整的路径,但是它不起作用。
它给了我错误的“排序:没有这样的文件或目录”
Exec从来没有给我这个问题,这是什么?
答案 0 :(得分:0)
在设置中找到sort
命令。通常sort
在/usr/bin/
路径中。使用这个
execlp("/usr/bin/sort","sort",file1,NULL);
代替
execlp("sort","sort",file1,NULL);
答案 1 :(得分:0)
两个write()
的内容不会分开;读者只是将它们读为一个块,并将两个字符串串联在一起:
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
int main(void){
int out[2];
pipe(out);
char file1[1024],file2[1024];
int pid=fork();
if(pid>0){
close(out[0]);
scanf(" %s",file1);
scanf(" %s",file2);
write(out[1],file1,strlen(file1));
//write(out[1],"\0",1);
write(out[1],file2,strlen(file2));
}
if(pid==0){
int cnt=0;
close(out[1]);
cnt=read(out[0],file1,1024);
file1[cnt]=0;
cnt = read(out[0],file2,1024);
file2[cnt]=0;
fprintf(stderr, "about to execlp(sort|%s|%s|NULL)\n",file1,file2);
execlp("sort","sort",file1,NULL);
return 0;
}
return 0;
}
./a.out
输入为:wtf omg
输出:
plasser@pisbak$ ./a.out
wtf omg
about to execlp(sort|wtfomg||NULL)
plasser@pisbak$ sort: cannot read: wtfomg: No such file or director
因此,关于未找到二进制文件的消息是 not ,但是 sort 无法找到文件 wtfomg
该参数作为参数传递。