首页 文章

检查文件是否是c文件并进行编译

提问于
浏览
0

我想以递归方式运行目录及其文件和子目录 . 假设该目录可以包含任何文件王(c,txt,python ....),检查当前文件是否为c文件,如果是,则进行编译 . 这是我到目前为止:

#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;
}

如何检查文件是否为c文件?以及如何使用代码编译它?任何帮助,将不胜感激 .

1 回答

  • 2

    您的问题很可能是错误引导的(您可能有XY problem):编译 C 很少是在其上运行编译器的小问题:您可能需要知道需要编译的 -I-D (和其他)标志与,需要链接的库等,等等 .

    如何检查文件是否为c文件?以及如何使用代码编译它?

    你可以运行 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);
    }
    

相关问题