有沒有辦法重定向命令列的輸出,該命令列將整數作為輸出回傳到 C 中的變數?
例如,如果命令是“cmd”,那么有沒有辦法重定向其輸出(整數)并將其存盤在 C 中的變數中?我嘗試使用 popen 和 fgets 但它似乎只適用于字符。有什么建議?
uj5u.com熱心網友回復:
它與 popen 和 fgets 完美配合:
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
const char *cmd = argc > 1 ? argv[1] : "echo 42";
char buf[32];
FILE *fp = popen(cmd, "r");
if( fp == NULL ){
perror("popen");
return 1;
}
if( fgets(buf, sizeof buf, fp) == buf ){
int v = strtol(buf, NULL, 10);
printf("read: %d\n", v);
}
return 0;
}
uj5u.com熱心網友回復:
如果要從標準輸入轉換字串,可以使用fgets然后使用atoi將輸入轉換為整數。
如果您想轉換命令的輸出,比如說ls并將命令的輸出存盤到變數中,您可以了解fork、dup2、pipe和exec函式系列。
本教程中有關此主題的更多資訊:在 C 中捕獲孩子的輸出。本教程還提供了一個示例,說明popen您是否想保持“高水平”。
uj5u.com熱心網友回復:
這是一個使用popen()and的更簡單的示例fscanf():
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE *fp = popen("date ' %s'", "r");
long seconds;
if (fp == NULL) {
fprintf(stderr, "popen failed: %s\n", strerror(errno));
return 1;
}
if (fscanf(fp, "%ld", &seconds) == 1) {
printf("epoch seconds: %ld\n", seconds);
pclose(fp);
return 0;
} else {
fprintf(stderr, "invalid program output\n");
pclose(fp);
return 1;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/456844.html
