fork, pipe exec and dub2

核能气质少年 提交于 2019-12-13 02:54:20

问题


This code is supposed to print "Output from 'ls -l':" and append the result of 'ls -l', but it doesn't... Does anyone has a clue whats wrong with this?

#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);
    }
}

回答1:


In your code the sizeof(readbuffer) is equal to 4 in the following snippet., so it reads 4 bytes max.

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

You can send the size of the buffer as another parameter, giving:

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

and invoke it with:

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


来源:https://stackoverflow.com/questions/22283329/fork-pipe-exec-and-dub2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!