Есть ли способ запускать команды командной строки из приложения C? Я хочу проверить серийный номер жесткого диска производителя с помощью команды wmic diskdrive get serialnumber
.
Запуск команд командной строки в собственном приложении
- Это в Windows, верно? 16.10.2015
- @duskwuff Да для windows 16.10.2015
- Возможный дубликат Как получить данные из WMI с помощью приложения C? 16.10.2015
Ответы:
Существует множество функций, которые позволяют вызывать внешнюю программу из C, некоторые из них "стандартные", некоторые из них только для Windows.
Но в вашем сценарии я бы рекомендовал вам использовать WMI API, предоставляемый Windows, вы можете найти примеры для этого уже в stackoverflow:
Как получить данные из WMI с помощью приложения C? как выполнить запрос wmi в c
Я не привел примеры, а скорее связался с уже существующими ответами на SO, потому что я не думаю, что имеет смысл копировать то, что уже есть.
Вы можете попробовать использовать 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;
}
Поскольку это файловый объект, теперь вы можете легко записать его в файл, если хотите, а также получить его по желанию.
Да, ты можешь. Однако это считается плохой практикой, поскольку это делает ваше приложение излишне зависимым от платформы и создает накладные расходы.
Вот так
#include <stdio.h>
#include <string.h>
void main ()
{
system("wmic diskdrive get serialnumber");
}
Подробнее об этом читайте здесь. Относительно вывода (цитируется по ссылке выше):
В случае ошибки возвращается значение -1, в противном случае - статус возврата команды.
Вы также можете использовать ReadConsoleOutputCharacter (ссылка на входящую ссылку msdn) для чтения вывода консоли.
Однако, прежде чем пытаться получить такие данные с помощью командной строки, подумайте об использовании API или любых других средств для получения данных, потому что, вызывая командную строку, вы добавляете нелепые накладные расходы на свое приложение, в которых нет необходимости.
wmic
выглядит примерно как SerialNumber Z81EFB1 E6503403 F123123
. Это не впишется в int
16.10.2015 ReadConsoleOutputCharacter
читаете консольный вывод внешнего процесса? Думаю, это не сработает. Перенаправление стандартного вывода этого процесса вашему вызывающему процессу и последующий его анализ может быть решением. 16.10.2015 ReadConsoleOutputCharacter
склонил чашу весов. Только так важно помочь ответить на ошибочный вопрос, но послать их так далеко в лес, что они умрут от голода ужасной смертью - это просто нехорошо. -1 30.01.2016