2013-05-02 4 views
-2

Скажем вот мой код:Как хранить вывод команды UNIX в полукокса с программированием C

int main() { 
    char *number; 
    system("grep total myfile > filename"); 

    printf(number); 
} 

Этот код находит строку из MYFILE, содержащий «общее» и выводит его на новый файл с именем filename. Я пытаюсь установить выходной набор на char «number» напрямую, вместо того, чтобы писать/читать из имени файла. Есть ли способ сделать это?

Спасибо за помощь!

+0

Не знаете, как это возможно. Чего вы пытаетесь достичь? Вы хотите, чтобы пользователь вводил значение 'number', или вы хотите прочитать файл' filename' и установить значение 'number' соответственно? – Ryan

+0

Форматирование вашей команды в массив символов, а не жесткое ее кодирование. В этом случае вы можете просто «открыть» имя файла и написать его там сами, конечно. – Useless

ответ

5

Если я понимаю, право ваше название, вы хотите получить output от command выполненной,

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

int main() { 
    char number[100]; 
    FILE *f = popen("echo 200", "r"); 
    while (fgets(number, 100, f) != NULL) { 
     printf("%s\n", number); 
    } 
    pclose(f); 

    return 0; 
} 

Или вы просто хотите передать переменную в команду и вывод вашей переменной

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

int main() { 
    int n = 100; 
    char buf[100]; 
    sprintf(buf, "echo %d > filename", n); // format the command 
    system(buf);       // execute 
    printf("%d\n", n);      // print the variable 

    return 0; 
} 
+0

@OlafDietsche Спасибо. исправлено. Интересная вещь - оригинальная версия. Поэтому я просто копирую и вставляю. – gongzhitaao

+0

Спасибо за помощь. Но мне нужно использовать «system (« fgrep total filename | cut -f5 -d »> filename2») », чтобы захватить пятое слово в строке, содержащей« total », и установить его в строку. Я не уверен, как включить это в ваш пример кода. Я просто заменил «system (buf)»? –

+0

попробуйте версию «popen», поместите там свою командную строку и посмотрите, что это такое. – gongzhitaao

3

Самый простой способ, так как вы пишете файл, - это открыть и прочитать файл. Вы можете сделать это так:

char number[100]; 
FILE *fp; 

system("echo 200 > filename"); 
fp = fopen("filename", "r"); 
if(fp != NULL) { 
    if(fgets(number, 100, fp) != NULL) { 
     printf("%s\n", number); 
    } 
    fclose(fp); 
} 

Если вы не хотите писать/читать файл, вы можете сделать небольшой танец с разветвления вашего процесса, открывая трубы и с помощью exec и считывания данных прямо процесса, который вы выполняли. На этот вопрос уже должен быть вопрос.

+0

Да, спасибо за помощь. Я на самом деле пытался сохранить вывод из системной команды на char напрямую, не имея необходимости писать/читать файл. Есть ли способ сделать это? –

+0

См. Другие ответы об использовании 'popen'. – paddy

2

Если я правильно понял, что вы имели в виду, это не путь.

Посмотрите на pipe и dup2.

2

Вы можете использовать popen, чтобы начать подпроцесс

FILE *fp = popen("echo 200", "r"); 
if (fp != NULL) { 
    char number[20]; 
    if (fgets(number, sizeof(number), fp)) 
     printf("%s\n", number); 

    pclose(fp); 
} 
0

использовать функцию sprintf(), чтобы создать строку с необходимым номером, а затем просто вызвать систему (your_string).

sprintf() examples

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