簡體   English   中英

使用文件作為已編譯c程序的輸入

[英]use file as an input to a compiled c program

在我的程序中,我有2條路徑,一個是包含各種文件的目錄的路徑。 每當我找到ac文件時,我都會對其進行編譯。 第二個路徑是輸入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數組中,並將其稱為輸入。 現在假設我編譯了一個具有ac程序並獲得ashly.co文件。 例如,我如何才能使用txt文件作為輸入來運行該程序?(以及實際上如何訪問該已編譯程序?):假設ashly.co從用戶那里得到2個數字並將它們乘以。 我想用input.txt的文件將成為這些兩個數輸出保存為一個新的txt文件。(這樣我就可以讀它后)我已經找到了一些這樣的答案,但在我的情況,我不希望使用freopen()函數(剛剛打開),我需要一種方法來從程序訪問已編譯的文件...任何幫助將不勝感激。

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", ...);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM