linux命令由popen在C代码上执行
发布时间:2020-12-13 18:47:15 所属栏目:Linux 来源:网络整理
导读:我有下面的代码,我在 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 :%sn",buffer); return 0;} 它输出: 21 Apr
|
我有下面的代码,我在
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 :%sn",buffer);
return 0;
}
它输出: 21 Apr 03:03:03 ntpdate[4393]: no server can be used,exiting buffer is: 为什么printf没有输出什么?如果我使用ls作为命令,则printf输出ls输出.我在做什么错误的ntpdate执行? 如果我执行下面的代码(参考webpage) #define COMMAND_LEN 8
#define DATA_SIZE 512
int 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
