c - Execlp 函数无法找到二进制文件

标签 c fork 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从来没有给我这个问题,这是什么?

最佳答案

两个write()的内容不会被分开;读者只需将它们作为一个 block 来读取,并将两个字符串连接起来:

<小时/>
#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
<小时/>

因此,消息不是关于未找到二进制文件,但是sort无法找到文件 wtfomg 作为参数传递。

关于c - Execlp 函数无法找到二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53793805/

相关文章:

Unix 上的 Java 执行

objective-c - 将指针分配给另一个指针会崩溃

c - 指向带函数的二维数组的指针

c - 在两个程序之间使用共享内存

java - Exec 命令似乎无法在 java 中正确执行

ssh - jsch ChannelExec 使用 nohup "lose"一些命令运行 .sh 脚本

c - 如何在 C 的同一行中扫描字符串(带空格)和整数

c - 垃圾收集库

c - 在管道中传递来自进程的整数数组

c++ - 没有从管道中获取所有线路