文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>使用syscall调用内核提供的接口

使用syscall调用内核提供的接口

时间:2009-03-27  来源:废墟

问题:在使用mknod的时候设备号不能够超过255的限制。
但是在其他系统上可以创建超过255的限制,怀疑是mknod的限制的

使用strace 跟踪

#strace -f mknod 11111 c 255 256

output:
mknod("11111", S_IFCHR|0666, makedev(255, 0)) = 0
确实是限制了,怀疑是c库的问题。

决定使用kernel提供的调用来实现
查看kernel源码 include/linux/syscalls.h能够发现sys开头函数这些函数就是
kernel提供的调用接口,可以看看有可能是意想不到的惊喜哟。我们怎么使用呢 ?
可以使用syscall这个调用来实现。

比如在这里验证可以创建大于255的程序例子

#include <linux/unistd.h>
#include <sys/syscall.h>
#include <sys/stat.h>
main()
{
        syscall(__NR_mknod, "1111", S_IFCHR|0666, (512 & 0xff) | (255 << 8) | ((512 & ~0xff) << 12));
}



__NR_mknod会被替用为一个int型的值,这个值就是指向kernel调用的编号。
其他的值可以直接参考 /usr/include/asm/unistd.h.

这种调用系统调用的方法可能与老的调用方式有点出入。

排行榜 更多 +
房间毁灭模拟器最新版

房间毁灭模拟器最新版

休闲益智 下载
街头追逐者最新版

街头追逐者最新版

休闲益智 下载
弓箭手2内置作弊菜单

弓箭手2内置作弊菜单

休闲益智 下载