में एक प्रोटोटाइप नहीं है, मैं शुरुआत के रूप में लिनक्स के लिए कर्नेल मॉड्यूल लिखना सीख रहा हूं। मैं जो करने की कोशिश कर रहा हूं वह है कि प्रत्येक कार्य और उसके बच्चे की प्रक्रिया को डीएफएस एल्गोरिदम का उपयोग करके कर्नेल लॉग में लिखना है। लेकिन जब मैं Makefile
का उपयोग कर कोड संकलन है, यह ऊपर त्रुटि दिखाता है:फंक्शन घोषणा सी
function declaration isn’t a prototype [-Werror=strict-prototypes]
struct task_struct *current;
यह बताते समारोह डीएफएस पर task_struct
कीवर्ड। यहाँ मेरी कोड है:
# include <linux/init.h>
# include <linux/kernel.h>
# include <linux/module.h>
# include <linux/sched.h>
# include <linux/list.h>
void DFS (struct task_struct *task)
{
struct task_struct *current;
struct list_head *list;
list_for_each (list, &task->children)
{
current = list_entry(list, struct task_struct, sibling);
printk(KERN_INFO "%d\t%d\t%s \n", (int)current->state, current->pid, current->comm);
if (current != NULL)
{
DFS(current);
}
}
}
int DFS_init(void)
{
printk(KERN_INFO "Loading the Second Module...\n");
printk(KERN_INFO "State\tPID\tName\n");
DFS(&init_task);
return 0;
}
void DFS_exit(void)
{
printk(KERN_INFO "Removing the Second Module...\n");
}
किसी को भी जानता है कि यह कैसे तय करने के लिए ??
क्यों _votedown_ ?? क्या तुम समझा सकते हो ?? –
सी 'वर्तमान' की अनुमति देता है। शायद आपके द्वारा शामिल हेडर में कुछ है? –
कर्नेल में, 'वर्तमान' एक वैश्विक रूप से दृश्यमान चर (सूचक) है जो वर्तमान प्रक्रिया-तालिका-प्रविष्टि को इंगित करता है। – wildplasser