社区
Linux/Unix社区
帖子详情
为什么以下代码不能调用find_task_by_id
kes2000
2007-08-26 10:17:03
#include <stdio.h>
#include <sys/stat.h>
#include <stdlib.h>
void execname() {
struct task_struct *my;
my = find_task_by_id(getpid());
printf("%s",my->comm);
}
int main() {
execname();
return 0;
}
...全文
148
1
打赏
收藏
为什么以下代码不能调用find_task_by_id
#include #include #include void execname() { struct task_struct *my; my = find_task_by_id(getpid()); printf("%s",my->comm); } int main() { execname(); return 0; }
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cceczjxy
2007-08-26
打赏
举报
回复
find_task_by_id
是个内核函数,你在用户空间没法调用.你不能这样直接使用它.
下边是别人写的,可以看看
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/proc_fs.h>
#include<linux/init.h>
#include<linux/sched.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("scutan");
static int find_read(char *buffer, char **buffer_location, off_t offset, int count, int *eof, void *data)
{
struct task_struct *p;
int pid;
pid = current->pid;
p = find_task_by_pid(pid);
sprintf(buffer, "%d\t%s\n", p->pid, p->comm);
return strlen(buffer);
}
static int __init find_init(void)
{
struct proc_dir_entry *entry;
entry = create_proc_entry("findpid", 0644, NULL);
if (entry == 0)
{
printk(KERN_ERR "creat_proc_entry failed\n");
return -1;
}
entry->mode = S_IFREG | S_IRUGO;
entry->size = 100;
entry->owner = THIS_MODULE;
entry->uid = 0;
entry->gid = 0;
entry->read_proc = find_read;
return 0;
}
void __exit find_exit(void)
{
remove_proc_entry("findpid", &proc_root);
}
module_init(find_init);
module_exit(find_exit);
Makefile
代码:
obj-m:=find.o
KERNELDIR:=/usr/src/linux
default:
make -C $(KERNELDIR) M=$(shell pwd) modules
install:
insmod find.ko
uninstall:
rmmod find.ko
clean:
rm -rf *.o *.mod.c *.ko
另外还有一个测试程序get.c
代码:
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
int main()
{
int fd;
char buf[50];
fd = open("/proc/findpid", O_RDONLY);
if (fd < 0)
{
printf("error\n");
exit(1);
}
memset(buf, 0, sizeof(buf));
if (read(fd, buf, 50) < 0)
{
printf("read error\n");
exit(1);
}
printf("buf = %s\n", buf);
printf("getpid = %d\n", getpid());
return 0;
}
看图说话之平衡二叉排序树(AVL树)
介绍了平衡二叉排序树的基本原理,重点介绍了AVL树的基本实现方法,并且给出了完整java
代码
实现
数据结构与算法——二叉平衡树(AVL树)详解
AVL树是带有平衡条件的二叉查找树(平衡二叉树)。这个平衡条件必须要`容易保持`。而且要保证它的深度是O(logN). AVL的条件是左右树的高度差(`平衡因子`)不大于1;并且它的每个子树也都是平衡二叉树。
二叉排序树、AVL树、红黑树、B树、B+树、Hash树、
二叉排序树 1.基本应用 二叉排序树也称为也叫二叉查找树,二叉搜索树, BST。 满足二叉查找树的一般性质,是指一棵空树具有如下性质: 对于二叉树中的任何一个非叶子节点,要求左子节点比当前节点值小,右子节点比当前节点值大。 任意节点的左右子树也分别是二叉查找树. 没有键值相等的节点. 中序遍历二叉排序树得到递增有序序列 2. 局限性及应用 一个二叉排序树是由n个节点随机构成,所以,对于某些情况,二...
[Collection与数据结构] 二叉搜索树,AVL树,红黑树
我们前面讲的二叉搜索树虽然可以缩短查找效率,但是如果数据接近有序,二叉搜索树将会退化为单分支的树,查找元素相当于在顺序表中查找元素,效率及其低下.所以我们可以引入
以下
的算法来解决,当二叉搜索树种插入新节点的时候,如果可以保证每个节点的左右子树高度之差的绝对值不超过1,即可降低树的高度,从而减少平均搜索的长度.空树是AVL树是AVL树,首先需要是一个二叉搜索树.他的左右子树都是AVL树左右高度之差(简称平衡因子)的绝对值不超过1(也就是每个节点的平衡因子只能为-1,0,1).
数据结构与算法:树 AVL平衡二叉排序树 (九)
工具:
ID
EA本系列介绍的是数据结构: 树这是第九篇目前计划一共有12篇:敬请期待吧~~高光时刻:添加情况分析:删除情况分析:在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树AVL树特点:一张图搞懂: 这里隐藏了三个方法是因为上一篇:二叉排序树(BST)已经说过了,就不重复介绍了,
代码
很简单,有需要的话翻过去看看吧~ 添加结点和上一篇讲的也一模一样但是如果真这样写,那不就成了BST树了么,先来分析情况,然后再看
代码
假设当前树结构是这样的,在没添加12之前,这是一颗AVL树但是一旦添
Linux/Unix社区
23,224
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章