Запустите файл hello.c, используя обработчики файлов в C - PullRequest
0 голосов
/ 01 октября 2018

В последнее время я пытаюсь везти с С, и я столкнулся с этим вопросом, где я застрял.

У меня есть файл hello.c

CODE 1

#include<stdio.h>
#include<stdlib.h>
int main(){
    printf("Hello World");
    return 0;
}

Я открываю этот файл и отображаю содержимое с помощью следующей программы на C (CODE 2)

CODE 2

#include<fcntl.h>
#include<stdio.h>    
int main() {

    FILE *fd;
    char ch;
    fd = fopen("/home/hello.c","r");

    if( fd != NULL ) {
        while((ch = getc( fd )) != EOF){
                putchar(ch);
        }
    }

    return 0;
}

Однако я хочу, чтобы вывод этого кода был Hello World, т.е. вывод файла hello.c, который читается.Как это можно сделать?

Ответы [ 4 ]

0 голосов
/ 01 октября 2018

В качестве общего решения вы можете также попытаться взглянуть на интерпретатор C, например Cling , и попытаться включить его в свой проект.

0 голосов
/ 01 октября 2018

В настоящее время во второй программе вы читаете файл hello.c.Таким образом, результатом CODE2 будет содержимое из hello.c.т.е. #include<stdio.h>...

Для того, что вам нужно, в CODE1 вам нужно записать вывод программы в отдельный файл (скажем, a.txt), а затем прочитать a.txt в CODE2.

Надеюсь, что это достаточный совет для дальнейшего решения.

0 голосов
/ 01 октября 2018

Чтобы запустить файл ac, сначала вам нужно скомпилировать его в машинный код, а затем выполнить его.

Чтобы скомпилировать его: запустите gcc source-file -o executetable-file

Torun, execute: executetable-file

Чтобы сделать то же самое в C, используйте функцию system() из <stdlib.h>

const char* tempFile = "./tempfile";
const char* sourceFile = "hello.c";

const char compileCommand[255];
sprintf(compileCommand, "gcc %s -o %s", sourceFile, tempFile);

system(compileCommand);

system(tempFile);

Этот код не был проверен.

0 голосов
/ 01 октября 2018

Ваш "КОД 2" должен был бы вызвать C-компилятор для компиляции "КОДА 1", а затем запустить его, используя system() или функцию, предоставляемую вашей операционной системой.

Кстати: это либоint main(void) или int main(int argc, char** argv), НЕ int main().

...