使用文件作为已编译c程序的输入

时间:2018-12-10 13:06:01

标签: c file compilation operating-system system-calls

在我的程序中,我有2条路径,一个是包含各种文件的目录的路径。 每当我找到一个c文件时,我都会对其进行编译。 第二个路径是输入txt文件的路径。 让我们这样说:

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目录保存在一个char数组中,并将其称为输入。 现在假设有一个我编译的c程序并获得了ashly.c.o文件。 如何使用txt文件作为输入来运行该程序?(实际上如何访问该已编译程序?) 例如: 假设ashly.c.o从用户那里获得2个数字并将它们相乘。 我想使用input.txt文件作为这两个数字 并将输出另存为新的txt文件。(以便以后可以阅读) 我找到了一些this的答案,但就我而言,我不想使用freopen()函数(只是打开),我需要一种方法来从程序访问已编译的文件... 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

forkexec可以满足您的要求。

if (fork() == 0) {
    int fd = open("/path/to/your/input", O_RDONLY);
    dup2(fd, 0);
    // execl or so
    exec("/path/to/the/created.o", ...);
}