Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Процессы в Unix, execlp


Автор: ksu04061992 30.11.2013, 11:18
Добрый день мне нужно написать программу, запускающую команду отдельной компиляции двух файлов
./prog f1.c f2.c
 Т.е. в результате работы должны быть  сформированные два исполняемых файла: f1.out и f2.out.
Заранее спасибо.

Автор: konshyn 30.11.2013, 12:13
Цитата(ksu04061992 @ 30.11.2013,  11:18)
Добрый день мне нужно написать программу, запускающую команду отдельной компиляции двух файлов
./prog f1.c f2.c
 Т.е. в результате работы должны быть  сформированные два исполняемых файла: f1.out и f2.out.
Заранее спасибо.

посмотри, что такое утилита make и make-файлы

Автор: Фантом 30.11.2013, 12:16
Это принципиально необходимо сделать на C/C++? Иначе с предыдущим оратором можно только согласиться...

Автор: konshyn 30.11.2013, 16:04
Цитата(Фантом @  30.11.2013,  12:16 Найти цитируемый пост)
сделать на C/C++?

тогда нужно просто в программе сделать два вызова system()
к примеру:

Код

system("gcc -o f1.out /home/user/.../f1.c");
system("gcc -o f2.out /home/user/.../f2.c");

Автор: ChipNDale 30.11.2013, 17:12
Причем тут system?
В заголовке даже подсказка есть - execlp.
Код
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int compile(const char* infile, const char* outfile)
{
    int pid;
    pid = fork();

    if (pid < 0)
    {
        perror("fork");
        return -1;
    }
    else if (pid > 0)
    {
        printf("Started process %d\n", pid);
    }
    else if (pid == 0)
    {
        if (execlp("gcc", "gcc", "-o", outfile, infile, (char*)0) < 0)
        {
            perror("exec");
            return -1;
        }
    }

    return pid;
}

void waitchild(int pid)
{
    int status;

    waitpid(pid, &status, 1);
    printf("Process %d exit status %d\n", pid, status);
}

int main()
{
    int pid1;

    if ((pid1 = compile("hello1.c", "h1")) < 0)
    {
        return -1;
    }

    int pid2;

    if ((pid2 = compile("hello2.c", "h2")) < 0)
    {
        return -1;
    }

    waitchild(pid1);
    waitchild(pid2);

    return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)