Есть ли способ запуска команд командной строки из приложения C? Я хочу проверить серийный номер производителя на жестком диске с помощью команды wmic diskdrive get serialnumber
.Выполнение команд командной строки в собственном приложении
ответ
Да, вы можете. Однако это считается плохой практикой, так как это делает ваше приложение бесполезным для платформы и создает накладные расходы.
Подобно
#include <stdio.h>
#include <string.h>
void main()
{
system("wmic diskdrive get serialnumber");
}
Подробнее на нем here Относительно выхода (цитата из приведенной выше ссылке):
возвращенное значение -1 при ошибке, и статус возврата из команда иначе.
Вы также можете использовать функцию ReadConsoleOutputCharacter (ссылка на ссылку msdn inbound) для чтения вывода на консоль.
Прежде чем пытаться получить эти данные с помощью командной строки, рассмотрите возможность использования API или любых других средств для извлечения данных, потому что, вызывая командную строку, вы добавляете в приложение ненужные накладные расходы.
И как можно получить выход? – Marged
по ссылке, которую я связал, относительно вывода: «Возвращаемое значение - -1 при ошибке, а статус возврата в противном случае». – Magisch
Нет. Выходной сигнал 'wmic' является чем-то вроде« SerialNumber Z81EFB1 E6503403 F123123'. Это не вписывается в 'int' – Marged
Есть много функций, которые позволяют вам вызывать внешнюю программу из 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, потому что я не думаю, что имеет смысл копировать то, что уже есть.
Из ссылки MSDN на WMI COM Api говорится: «Обратите внимание только на WMI поддерживает разработку на C++ с использованием Microsoft Visual C++ версии 6.0 и более поздних систем разработки ». – Magisch
Пожалуйста, проверьте приведенную выше ссылку. В нем показан пример, который является простым C, не связанным с C++. Кажется, что COM - это только одна альтернатива доступу к WMI. – Marged
Вы можете попробовать использовать 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;
}
Поскольку это объектный файл теперь можно легко записать его в файл, если вы хотите, и получить его в тоже.
Это на Windows, правильно? – duskwuff
@duskwuff Да для окон –
Возможный дубликат [Как получить данные из WMI с помощью приложения C?] (Http://stackoverflow.com/questions/1431103/how-to-obtain-data-from-wmi-using- ac-application) –