Ошибка компиляции gcc: нет входных файлов / fork - PullRequest
0 голосов
/ 04 мая 2018

Когда я иду, чтобы создать объектный файл для моего файла runim.c для моего "makefile" Я получаю это сообщение об ошибке:

gcc: фатальная ошибка: нет входных файлов

Я не уверен, как это исправить. Я предоставил свой код, но я не думаю, что проблема будет там? Нужен ли мне файл .h? Также Является ли реализация моего процесса fork () правильной? Я должен использовать файл 'testsim.c' вместе с приведенным ниже кодом, чтобы взять аргумент командной строки и запустить его в зависимости от количества процессов, которые нужно запустить

т.е. runim 2

'runim' - исполняемый файл из файла makefile

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main (int argc, char *argv[])
{
    FILE *file;
    file = fopen("testsim.c", "w+");

    int childpid;
    int pr_count;
    pr_count = 0;

    char *line = NULL;
    size_t len = 0;
    ssize_t read;
    int i;
    int pr_limit;

    read  = getline(&line, &len, file);
    int MAX_BUF;
    MAX_BUF  = read;
    char buf[MAX_BUF];


    pr_limit = atoi(argv[1]);
    for (i = 0; i < pr_limit; i++)
    {
            childpid = fork();

            if (childpid == 0) // Child Process Code
            {
                    if (argc != 2)
                    {
                            fprintf(stderr, "Usage: %s processes\n", argv[0]);
                            return 1;
                    }

                    while(!feof(file))
                    {
                            if (pr_count == pr_limit)
                            {
                                    waitpid(-1, &pr_count, WNOHANG);
                                    pr_count--;
                            }

                            else
                            {
                                    fgets(buf, MAX_BUF, file);
                            }
                    }

                    fclose(file);
                    waitpid(-1, &pr_count, WNOHANG);
                    exit(EXIT_SUCCESS);
                    fprintf(stderr, "i: %d process ID: %ld parent ID: %ld child ID: %ld\n", i, (long)getpid(), (long)getppid(),(long)childpid);

            pr_count--;
            }

            if(childpid < 0)
            {
                    perror("Error: waitpid() failed\n");//Fork Failed
                    return EXIT_FAILURE;
            }
    }

    return 0;
}

Makefile включен:

CC = gcc

CFLAGS = -Wall -ansi

LIBS =

OBJ = runsim.o testsim.o

stats: $(OBJ)

        $(CC) $(CFLAGS) -o runsim $(OBJ) $(LIBS)


runsim.o: runsim.c

        $(CC) -c $(CFLAGS) runsim.c


testsim.o: testsim.c

        $(CC) -c $(CFLAGS) testsim.c


.PHONY: clean

clean:

        -rm *.o $(OBJ) runsim

Произошла ошибка при попытке запустить 'make', как показано ниже:

runsim.c: In function âmainâ:
runsim.c:22:2: warning: implicit declaration of function âgetlineâ [-Wimplicit-function-declaration]
  read  = getline(&line, &len, file);
 ^
runsim.c:33:22: error: expected expression before â/â token
   if (childpid == 0) // Child Process Code
                  ^
runsim.c:25:7: warning: unused variable âbufâ [-Wunused-variable]
  char buf[MAX_BUF];
       ^
runsim.c:13:6: warning: variable âpr_countâ set but not used [-Wunused-but-set-variable]
  int pr_count; 
      ^
make: *** [runsim.o] Error 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...