gpt4 book ai didi

C : How to use a struct, 在函数 A 中声明和定义,在另一个函数 B 中

转载 作者:行者123 更新时间:2023-12-04 11:02:31 25 4
gpt4 key购买 nike

我的 C 代码有问题。

其实我已经声明struct task_struct *twrite_pid功能。t将接收指定任务的 pid。这是函数的代码:

static ssize_t write_pid(struct file *pfile, const char __user *buffer,
size_t length, loff_t *offset)
{
char mybuf[10];
int pid = 0;
struct task_struct *t;
struct siginfo info;

/* read the value from user space */
if(length > 10)
return -EINVAL;
copy_from_user(mybuf, buffer, length);
sscanf(mybuf, "%d", &pid);
printk("pid = %d\n", pid);

/* send the signal */
memset(&info, 0, sizeof(struct siginfo));
info.si_signo = SIG_TEST;
info.si_code = SI_QUEUE; // this is bit of a trickery: SI_QUEUE is normally used by sigqueue from user space,
// and kernel space should use SI_KERNEL. But if SI_KERNEL is used the real_time data
// is not delivered to the user space signal handler function.
info.si_int = 260; //real time signals may have 32 bits of data.

rcu_read_lock();

t = pid_task(find_vpid(pid), PIDTYPE_PID); //find the task_struct associated with this pid

if(t == NULL){
printk("no such pid\n");
rcu_read_unlock();
return -ENODEV;
}
rcu_read_unlock();

return length;
}

现在我想用 t在另一个函数中作为参数。这是名为 read_pid 的函数 B 代码的一部分更清楚地说明问题:
static ssize_t read_pid(struct file *pfile, char __user *buffer,
size_t length, loff_t *offset)
{

size_t buf_size = 0;
char *buf = NULL;
ssize_t total = 0;
int yalv;
int ret;
struct siginfo info;

ret = send_sig_info(SIG_TEST, &info, t); //send the signal
if (ret < 0) {
printk("error sending signal\n");
kfree(buf);
return ret;
}
}

如您所见, t用作 send_sig_info 的参数功能。

我怎样才能做到这一点 ?谢谢你。

最佳答案

简短的回答是:你不能!

内部的局部变量 write_pid可以传递给内部调用的函数 write_pid但曾经write_pid返回局部变量不再存在,因此无法使用。

如果您想使用 t之后 write_pid已经返回,你必须让它成为 write_pid 的调用者的变量然后传递该变量的地址。

就像是:

static ssize_t write_pid(struct file *pfile, const char __user *buffer,
size_t length, loff_t *offset,
struct task_struct **pt)
{
....
*pt = pid_task(....)
....
}

并称之为:
 struct task_struct *t;
write_pid(............, &t);

现在您可以通过 tread_pid

关于C : How to use a struct, 在函数 A 中声明和定义,在另一个函数 B 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58710934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com