【发布时间】:2011-02-01 05:35:15
【问题描述】:
我已经在 C 中实现了一个基本的链表,作为开发简单 shell 的项目的一部分 - 它通过维护 shell 在后台运行的 pid 列表来支持进程的后台处理。代码如下。第一次插入queue_process(some_pid) 可以正常工作,但随后链表的行为就好像列表中从来没有任何节点(即调试函数总是打印“没有现有进程”)。我已经检查了这个文件和调用这些函数的文件是否会重置头指针无济于事。我的链表逻辑是否遗漏了什么?
对 queue_process EDIT: 的调用发生在由 shell 启动的子进程中,看起来像这样 /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);
}
【问题讨论】:
-
找到一个不同的链表实现会更好吗?这段代码或总体程序似乎存在某种固有缺陷。
-
“struct xssh_process”的声明是什么?它是一个完整的结构还是只是一个标签?在编写链表时,您可能一开始使用了不完整的结构标记,以使节点能够指向自身。
标签: c linked-list