如何从popen()函数读取标准输出并将其存储在C语言的char数组中?

问题描述 投票:0回答:1

好吧,我陷入了将stdout输出发送到阵列的问题。我该如何解决这个问题?我需要将带有执行代码的bash命令输出从服务器发送回客户端。该协议是TCP。谢谢!

     void func(int sockfd)
     { 
        char buff[MAX]; 
        for (;;) 
        { 
            bzero(buff, MAX); 
            read(sockfd, buff, sizeof(buff)); 
            printf("From client: %s\n", buff);
            if (strncmp("exit", buff, 4) == 0) 
            { 
                printf("Server Exit...\n"); 
                write(sockfd, buff, sizeof(buff));
                break; 
            } 
            FILE *cmd=popen(buff,"r");
            while (fgets(buff, sizeof(buff), cmd))
            strcpy(buff,cmd);
            pclose(cmd);
            write(sockfd, buff, sizeof(buff)); 
            my_itoa(system(buff),buff);
            write(sockfd, buff, sizeof(buff));          
        } 
     } 
c linux tcp posix popen
1个回答
0
投票

我猜您想将bash命令的执行结果发送回客户端。您可以更改代码,以便每次从cmd获得一行字符时都将其写入sockfd。

FILE* cmd=popen(buff, "r");
while(fgets(buff, sizeof(buff), cmd))
{
  write(sockfd, buff, strlen(buff));  // sizeof() will write more than you actually read.
}
pclose(cmd);
© www.soinside.com 2019 - 2024. All rights reserved.