проверьте, является ли файл файлом AC, и скомпилируйте его - PullRequest
0 голосов
/ 09 декабря 2018

Я хочу рекурсивно запускать каталог, его файлы и подкаталоги.допустим, что каталог может содержать любой король файла (c, txt, python ....), проверить, является ли текущий файл файлом ac, и скомпилировать его, если он есть.Вот что у меня есть:

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <fcntl.h>
#include <stdlib.h>
#include<errno.h> 

void listdir(const char *name, int indent)
 {
  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);
    }
}
closedir(dir);
}

int main(void) {
listdir(".", 0);
return 0;
}

Как я могу проверить, является ли файл AC-файлом?и как мне скомпилировать его с помощью кода?Любая помощь будет оценена.

1 Ответ

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

Ваш вопрос, скорее всего, неверно направлен (у вас может быть проблема XY ): компиляция C редко является тривиальным вопросом запуска компилятора поверх него: вам, вероятно, нужно знать, что -I и -D (и другие) флаги, с которыми он должен быть скомпилирован, с какими библиотеками нужно связать и т. Д. И т. Д.

как я могу проверить, является ли файл ac файлом?и как мне скомпилировать его, используя код?

Вы можете запустить system("gcc -c $file.c"), и если он скомпилируется (system возвращает 0), это, вероятно, был C файл.

Примечание: если файл не не компилируется, это может быть связано с тем, что он не является файлом C или вы не передали правильные флаги компилятору.

как мне запустить текущий файл?

Примерно так:

char path[PATH_MAX];
char cmd[4096 + 2*PATH_MAX];

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...