2014-08-27 2 views
0

У меня есть программа C, которая печатает метку времени в виде строки, используя следующую строку:Сохранение системных вызовов в программировании C

sprintf (scratch_buffer, "%s\0", dfr_time_date_strg); 

Эта метка всегда напечатанный в формате UTC, но я хотел бы добавить строку звонков date +%z и date +%Z.

двух значений часовых поясов можно назвать такие:

system("date +%z"); 
system("date +%Z"); 

Но как я могу назначить их char строк, называемых tz_offset и tz_name так, чтобы конечная метка печати линия:

sprintf (scratch_buffer, "%s %s (%s)\0", dfr_time_date_strg, tz_offset, tz_name); 
+0

Вы хотите использовать вывод 'system (" date +% z ");' и другую команду? –

+0

Да, пожалуйста. Например, '+ 0100' и' BST'. –

+3

@DustinCook Прежде всего, это не «системные вызовы» (это нечто совершенно отличное), во-вторых, google 'popen()'. ** Однако, если вам нужно только форматировать текущую дату, ** тогда вам будет намного лучше использовать 'strftime()'. –

ответ

4

Во-первых, то, что вы описываете как «системный вызов», это не системный вызов, только вызов функции system(). Системный вызов - something different.

Что касается вашего вопроса: у вас есть stereotypical XY problem. Вы определенно НЕ хотите захватить вывод команды date. (. That could be done using popen(), но пожалуйста не) Вы, а хотите использовать стандартную библиотеку:

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

int main() 
{ 
    time_t t = time(NULL); 
    struct tm *tm = localtime(&t); 
    char buf[256]; 
    strftime(buf, sizeof buf, "%Z", tm); 
    printf("%s\n", buf); 
    return 0; 
} 

выше фрагмент кода при компиляции и запуска, печатает CEST для меня.

Смежные вопросы