использовать файл в качестве входных данных для скомпилированной программы c - PullRequest
0 голосов
/ 10 декабря 2018

В моей программе я получаю 2 пути, один - путь к каталогу, который содержит все виды файлов.Всякий раз, когда я нахожу файл AC, я компилирую его.Второй путь - это входной текстовый файл.скажем так:

home/dvir/workspace/assignment1/students/  -(directory)
home/dvir/workspace/tests/input1.txt/ -(input txt file)

вот часть моего кода:

void listdir(const char *name, int indent)
{
    char path[80];
    char cmd[4096 + 2*80];

    DIR *dir;
    struct dirent *entry;

    if (!(dir = opendir(name)))
        return;

    while ((entry = readdir(dir)) != NULL) {
        if (entry->d_type == DT_DIR) {
            char path[1024];
            if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
                continue;
            snprintf(path, sizeof(path), "%s/%s", name, entry->d_name);
            printf("%*s[%s]\n", indent, "", entry->d_name);
            listdir(path, indent + 2);
        } else {
            printf("%*s- %s\n", indent, "", entry->d_name);
            snprintf(path, sizeof(path), "%s/%s", name, entry->d_name); 
            snprintf(cmd, sizeof(cmd), "gcc -c %s -o %s.o", path, path);
            if (system(cmd) == 0) {
                printf("Compiled %s to %s.o\n", path, path);
            }
        }
    }
    closedir(dir);
}

Он рекурсивно проходит по каталогу и компилирует все файлы, я сохранил каталог input.txtв массиве символов и называется его входом.теперь давайте предположим, что у меня есть программа ac, которую я скомпилировал и получил файл ashly.co.как я могу запустить эту программу, используя txt-файл в качестве входных данных (и как я могу получить доступ к этой скомпилированной программе?), например: скажем, ashly.co получает 2 числа от пользователя и умножает их.Я хочу использовать файл input.txt для этих двух чисел и сохранить выходные данные как новый текстовый файл (чтобы я мог прочитать его позже). Я нашел некоторые из этих ответов, но в моем случаеЯ не хочу использовать функцию freopen () (просто открыть), и мне нужен способ доступа к скомпилированному файлу из моей программы ... Любая помощь будет принята.

1 Ответ

0 голосов
/ 10 декабря 2018

fork и exec могут делать то, что вы хотите.

if (fork() == 0) {
    int fd = open("/path/to/your/input", O_RDONLY);
    dup2(fd, 0);
    // execl or so
    exec("/path/to/the/created.o", ...);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...