我正在学习如何创建自定义系统调用并实现将ptr char指针作为参数的代码(save.c),然后将ptr
指向的字符串复制到sys_mybuf
。实现将ptr
char指针作为参数的代码(load.c),然后将sys_mybuf
中的字符串复制到ptr
指向的缓冲区中。所以,我期待以下代码。但它似乎无法奏效。我希望所有内核系统调用代码都使用char数组。我该怎么办?
save.c
1 #include <linux/kernel.h>
2 #define STRING__SIZE 501
3 char sys_mybuf[STRING__SIZE]; // a string of at most size 500.
4 asmlinkage int sys_save(char* ptr)
5 {
6 int index = 0;
17
18 ptr[index] = '\0';
19 return index; // the number of bytes actually read.
20 }
load.c
1 #include <linux/kernel.h>
2 // extern
3 asmlinkage int sys_load(char* ptr)
17 ptr[index] = '\0';
18 return index;
19 }
〜
答案 0 :(得分:2)
正如我在评论中所猜测的那样。问题只是你没有声明文件load.c
中的变量。
要获得快速解决方案,请将以下以下行添加到load.c
:
#define STRING__SIZE 501
extern char sys_mybuf[STRING__SIZE];
这告诉编译器sys_mybuf
是在另一个翻译单元(例如源文件)中声明的全局变量。
应该做什么,将其放在头文件中,并将所有文件包含在需要访问全局数据的文件中。