2015-10-16 2 views
1

Есть ли способ запуска команд командной строки из приложения C? Я хочу проверить серийный номер производителя на жестком диске с помощью команды wmic diskdrive get serialnumber.Выполнение команд командной строки в собственном приложении

+0

Это на Windows, правильно? – duskwuff

+0

@duskwuff Да для окон –

+1

Возможный дубликат [Как получить данные из WMI с помощью приложения C?] (Http://stackoverflow.com/questions/1431103/how-to-obtain-data-from-wmi-using- ac-application) –

ответ

-1

Да, вы можете. Однако это считается плохой практикой, так как это делает ваше приложение бесполезным для платформы и создает накладные расходы.

Подобно

#include <stdio.h> 
#include <string.h> 
void main() 
{ 
    system("wmic diskdrive get serialnumber"); 
} 

Подробнее на нем here Относительно выхода (цитата из приведенной выше ссылке):

возвращенное значение -1 при ошибке, и статус возврата из команда иначе.

Вы также можете использовать функцию ReadConsoleOutputCharacter (ссылка на ссылку msdn inbound) для чтения вывода на консоль.

Прежде чем пытаться получить эти данные с помощью командной строки, рассмотрите возможность использования API или любых других средств для извлечения данных, потому что, вызывая командную строку, вы добавляете в приложение ненужные накладные расходы.

+1

И как можно получить выход? – Marged

+0

по ссылке, которую я связал, относительно вывода: «Возвращаемое значение - -1 при ошибке, а статус возврата в противном случае». – Magisch

+0

Нет. Выходной сигнал 'wmic' является чем-то вроде« SerialNumber Z81EFB1 E6503403 F123123'. Это не вписывается в 'int' – Marged

2

Есть много функций, которые позволяют вам вызывать внешнюю программу из C, некоторые из них "standard", некоторые из них - specific to Windows.

Но в вашем случае я бы порекомендовал вам использовать API WMI предоставляемого Windows, вы можете найти примеры для этого уже на StackOverflow:

How to obtain data from WMI using a C Application? how to run a wmi query in c

Я не привести примеры, но скорее связан к уже существующим ответам на SO, потому что я не думаю, что имеет смысл копировать то, что уже есть.

+0

Из ссылки MSDN на WMI COM Api говорится: «Обратите внимание только на WMI поддерживает разработку на C++ с использованием Microsoft Visual C++ версии 6.0 и более поздних систем разработки ». – Magisch

+0

Пожалуйста, проверьте приведенную выше ссылку. В нем показан пример, который является простым C, не связанным с C++. Кажется, что COM - это только одна альтернатива доступу к WMI. – Marged

0

Вы можете попробовать использовать popen: -

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

int main() 
{ 
    char c; 
    FILE *file = popen("wmic diskdrive get serialnumber", "r"); 
    if (file) { 
    while ((c = getc(file)) != EOF) 
     putchar(c); 
    fclose(file); 
    } 
    return 0; 
} 

Поскольку это объектный файл теперь можно легко записать его в файл, если вы хотите, и получить его в тоже.