выполнение внешнего файла на c

Модератор: Модераторы разделов

Аватара пользователя
ezheg
Сообщения: 258
Статус: джидай 3-го уровня
ОС: Mac OS X

выполнение внешнего файла на c

Сообщение ezheg »

как можно выполнить какую-либо комманду/исполняемый файл на Си?

например выполнить -

Код: Выделить всё

/usr/sbin/hddtemp /dev/hda
и в строковой переменной получить вывод этой комманды
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: выполнение внешнего файла на c

Сообщение Gloomy »

Код: Выделить всё

#include <stdlib.h>
system("/usr/sbin/hddtemp /dev/hda");

А получить результат наверное через пайпы.
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: выполнение внешнего файла на c

Сообщение madskull »

Перл надо юзать :)

Самый простой способ (ИМХО): вывод команды направить в файл, а потом уже файл парсить.
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: выполнение внешнего файла на c

Сообщение nercus »

имхо так можно

Код: Выделить всё

#include <stdio.h>

char out[256];
FILE *hddtemp
hddtemp = popen("/usr/bin/hddtemp /dev/hda","r");
fgets(out, 256, hddtemp);
pclose(hddtemp);
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Аватара пользователя
ezheg
Сообщения: 258
Статус: джидай 3-го уровня
ОС: Mac OS X

Re: выполнение внешнего файла на c

Сообщение ezheg »

спасибо всем за ответы. с использованием последнего примера и манов:

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
void write_data (FILE * stream){
int i;
for (i = 0; i < 100; i++)
 fprintf (stream, "%d\n", i);
 if (ferror (stream))
 {
  fprintf (stderr, "Output to stream failed.\n");
  exit (EXIT_FAILURE);
  }
}
main(){
FILE *hddtemp;
hddtemp=popen("/usr/bin/hddtemp /dev/hda","w");
write_data(hddtemp);
}

Код: Выделить всё

bash-2.05b$ ./hdd_temp
bash-2.05b$ ВНИМАНИЕ: Диск /dev/hda не включен в базу данных поддерживаемых приводов.
ВНИМАНИЕ: Но с использованием распространенных параметров он что-то выдает.
ВНИМАНИЕ: Заметьте, что показанная температура может таковой не являться.
ВНИМАНИЕ: См. опции --help, --debug и --drivebase.
ВНИМАНИЕ: И не забудьте, что можно добавить привод в hddtemp.db
/dev/hda: ST360014A:  32°C или °F


еще бы теперь напрячь собственные мозги для извлечения на Си из всего этого циферок с температурой..B)
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: выполнение внешнего файла на c

Сообщение nercus »

2piton3000
имхо fscanf():

char dev[256];
char hdd[256];
int temp;
fscanf(hddtemp, "%s %s %d", dev, hdd, &temp); /* Input: /dev/hda: ST360014A: 32C */
dev[strlen(dev)-1] = 0; /* remove ':' */
hdd[strlen(hdd)-1] = 0; /* remove ':' */

вот как-то так.
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали: