【问题标题】:fork, pipe exec and dub2fork、pipe exec 和 dub2
【发布时间】:2014-03-09 14:19:56
【问题描述】:

这段代码应该打印“'ls -l'的输出:”并附加'ls -l'的结果,但它没有...... 有人知道这是怎么回事吗?

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

void readStringFromFile (int file, char * readbuffer) {
    int nbytes = read(file, readbuffer, sizeof(readbuffer));
    readbuffer[nbytes] = 0;
}

int main(int argc, char const *argv[])
{
    int fd[2];
    pipe(fd);

    if (fork()==0)//child process
    {   
        close(fd[0]);
        dup2(fd[1],1);
        int retValue = execl("/bin/ls","ls","-l", NULL);
        printf("Exec failed: retValue = %d\n",retValue);
    } else
    {
        int status;
        close(fd[1]);
        wait(&status);
        char readbuffer[1024];
        readStringFromFile(fd[0],readbuffer);
        printf("Output from 'ls -l':\n %s", readbuffer);
    }
}

【问题讨论】:

    标签: c fork pipe dup


    【解决方案1】:

    在您的代码中,sizeof(readbuffer) 在以下 sn-p 中等于 4,因此它最多读取 4 个字节。

    void readStringFromFile (int file, char * readbuffer) {
       int nbytes = read(file, readbuffer, sizeof(readbuffer));
       readbuffer[nbytes] = 0;
    }
    

    您可以将缓冲区的大小作为另一个参数发送,给出:

    void readStringFromFile (int file, char * readbuffer, int maxsize) {
       int nbytes = read(file, readbuffer, maxsize);
       readbuffer[nbytes] = 0;
    }
    

    并调用它:

    readStringFromFile(fd[0], readbuffer, sizeof(readbuffer));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-02
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 2015-12-01
      • 2015-01-22
      • 1970-01-01
      相关资源
      最近更新 更多