如何在char数组中获取`date`命令的输出?

时间:2012-07-19 03:53:21

标签: c linux

我想将GNU / Linux date命令的输出放在字符数组中。

示例:

char array[25];

$ date
Thu Jul 19 09:21:31 IST 2012

printf("%s", array);
/* Should display "Thu Jul 19 09:21:31 IST 2012" */

我试过了:

#include <stdio.h>
#include <string.h>

#define SIZE 50

int main()
{
    char array[SIZE];

    sprintf(array, "%s", system("date"));
    printf("\nGot this: %s\n", array);

    return 0;
}

但输出显示数组中的NULL

3 个答案:

答案 0 :(得分:7)

使用popen能够读取命令的输出。请务必使用pclose关闭广告系列。

FILE *f = popen("date", "r");
fgets(array, sizeof(array), f);
pclose(f);

但是,您可以使用localtimestrftime代替执行外部程序。

time_t t = time(0);
struct tm lt;
localtime_r(&t, &lt);
strftime(array, sizeof(array), "%a %b %d &T %z %Y", &lt);

ctime类似,但不包括时区。

ctime_r(&t, array);

答案 1 :(得分:2)

当你调用system(command)时,它的返回值不是命令输出的char*,而是命令的退出代码。该命令成功完成,并返回0;这就是你看到NULL的原因。如果要获取"date"命令返回的字符串,则需要捕获输出流并将其转换为字符串。

答案 2 :(得分:1)

#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t result;
    char array[25] = {'\0'};
    result = time(NULL);
    sprintf(array, "%s", asctime(localtime(&result)));
    printf("%s", array);
    return(0);
}