Я выполняю системный вызов в Linux.У меня проблема: Не удается получить значение параметра от пользователя.Моя версия ядра 4.19.5
Это код пользователя:
int main(){
char *name = (char*)malloc(sizeof(char)*32);
int fd1;
char buf[128];
fd1 = open("/usr/src/linux-4.19.5/abc", O_WRONLY);
if (fd1 == -1) {
printf("ERROR\n");
return EXIT_FAILURE;
}
printf("Enter process to find: ");
scanf (" %[^\n]", name);
write(fd1, name, strlen(name));
long int status = syscall(335, name);
printf("System call returned %ld\n", status);
close(fd1);
return 0;}
Но я не могу получить значение 'name' в коде ядра: Это код ядра:
asmlinkage long sys_process_name(char* process_name){
struct task_struct *task;
struct tty_struct *my_tty;
my_tty = get_current_tty();
char name[32];
for_each_process(task){
if(strcmp(task->comm,process_name) == 0){
sprintf(name, "PID = %ld\n", (long)task_pid_nr(task));
(my_tty->driver->ops->write) (my_tty, name, strlen(name)+1);
}
}
return 0;}
Значение имя_процесса равно нулю.