Запуск pdftotext x.pdf y.txt программно в Linux? - PullRequest
0 голосов
/ 13 января 2019
char *readFile(char *path, char *buffer) {

    if(strcmp(getExtenstion(path), "pdf") == 0){
        pid_t pid = fork();
        if(pid == 0) {
            execlp("pdftotext", path, "henok.txt");
        }

        wait(NULL);
        readTextFile("henok.txt", buffer);
    }

    else {
        readTextFile(path, buffer);
    }

    return buffer;
}

Я хочу прочитать pdf-файл на c, но после просмотра веб-страниц я знаю, что слишком сложно непосредственно читать pdf-файл, поэтому я использую инструмент командной строки pdftotext в linux для преобразования pdf в txt-файл. После преобразования PDF я могу прочитать текстовый файл.

-> pdftotext shell.pdf henok.txt

отлично работает в оболочке, но я хочу запустить эту команду программно.

Приведенная выше команда показывает ошибку, ошибка ввода / вывода: не удалось открыть файл 'henok.txt': такого файла или каталога нет.

1 Ответ

0 голосов
/ 13 января 2019

Дочерний процесс заканчивается после запуска 'pdf2text', а не после завершения преобразования pdf2text. Когда родительский процесс обнаруживает конец дочернего процесса, текстовый файл еще не создан. Чтобы это работало, дочерний процесс должен контролировать завершение выполнения pdf2text. Чтобы сделать это проще, вам не нужно форкать, просто используйте команду 'system'. Например,

// 20 is length of "pdf2text" + length of "henok.txt" + 2 spaces + NULL character
char * cmd = malloc (20 + strlen (path)); 
sprintf(cmd, "pdf2text %s henok.txt", path);
system(cmd);
free(cmd);
...