linux命令由popen在C代码上执行

linux命令由popen在C代码上执行,第1张

概述我有下面的代码,我在 here上引用线程来使用popen函数 int main(int argc,char *argv[]){ FILE* file = popen("ntpdate", "r"); char buffer[100]; fscanf(file, "%100s", buffer); pclose(file); printf("buffe 我有下面的代码,我在 here上引用线程来使用popen函数
int main(int argc,char *argv[]){        file* file = popen("ntpdate","r");    char buffer[100];    fscanf(file,"%100s",buffer);    pclose(file);    printf("buffer is :%s\n",buffer);    return 0;}

它输出:

21 Apr 03:03:03 ntpdate[4393]: no server can be used,exitingbuffer is:

为什么printf没有输出什么?如果我使用ls作为命令,则printf输出ls输出.我在做什么错误的ntpdate执行

如果我执行下面的代码(参考webpage)

#define COMMAND_LEN 8#define DATA_SIZE 512int main(int argc,char *argv[]){    file *pf;       char command[COMMAND_LEN];       char data[DATA_SIZE];       // Execute a process Listing       sprintf(command,"ntpdate");       // Setup our pipe for reading and execute our command.       pf = popen(command,"r");       if(!pf){         fprintf(stderr,"Could not open pipe for output.\n");         return;       }       // Grab data from process execution       fgets(data,DATA_SIZE,pf);       // Print grabbed data to the screen.       fprintf(stdout,"-%s-\n",data);       if (pclose(pf) != 0)           fprintf(stderr," Error: Failed to close command stream \n");       return 0;}

我明白了

21 Apr 03:15:45 ntpdate[5334]: no servers can be used,exiting-�2}�����"|�4#|�- Error: Failed to close command stream

上面的代码有什么错误?

解决方法 由于输出是stderr,你需要像这样重定向stderr:
file* file = popen("ntpdate 2>&1","r");

这会将stderr重定向到stdout,因此您将看到两者的输出.第二个问题fscanf将在第一个空格处停止,因此您可以使用fgets替换:

fgets(buffer,100,file);
总结

以上是内存溢出为你收集整理的linux命令由popen在C代码上执行全部内容,希望文章能够帮你解决linux命令由popen在C代码上执行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1045985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存