Я реализовал базовый связанный список в C как часть проекта по разработке простой оболочки - он поддерживает фоновое управление процессами, поддерживая список pids, которые оболочка выполняла в фоновом режиме. Код ниже. Вставка с queue_process(some_pid)
отлично работает в первый раз, но в последующие моменты связанный список действует так, как будто в списке никогда нет узлов (т.е. функция «Нет существующих процессов» всегда печатается функцией отладки). Я проверил этот файл и файл, который вызывает эти функции для всего, что могло бы сбросить указатель головы безрезультатно. Я что-то упустил в логике связанного списка?
Вызов queue_process EDIT: происходит в дочернем процессе, запущенном оболочкой, и выглядит следующим образом / EDIT: queue_process(getpid())
Спасибо!
void queue_process(pid_t pid_to_insert)
{
pmesg(2, "In queue_process.\n");
if (head == NULL)
{
pmesg(3, "No existing processes.\n");
head = malloc(sizeof(struct xssh_process));
head->pid = pid_to_insert;
head->next = NULL;
}
else
{
pmesg(3, "There are existing processes.\n");
struct xssh_process *new_process = malloc(sizeof(struct xssh_process));
new_process->next= head;
head = new_process;
}
print_processes();
}
void print_processes()
{
pmesg(2, "In print_processes.\n");
struct xssh_process *at_node = head;
if (head == NULL) { pmesg(2, "There are currently no background processes.\n"); return; }
pmesg(2, "Process IDs from head (most recently executed) to tail: %i -> ", at_node->pid);
while (at_node != NULL)
{
pmesg(2, "%i ->", at_node->pid);
at_node = at_node->next;
}
pmesg(3, "Head's pid in print is %i.\n", head->pid);
}