LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 726|回复: 6

我终于进入了新系统,可是我添加的系统调用始终返回-1,就是调用失败!

[复制链接]
发表于 2005-4-17 14:54:49 | 显示全部楼层 |阅读模式
很奇怪.我都是按照严格按照步骤操作的,可能是什么问题呢?
发表于 2005-4-20 20:49:36 | 显示全部楼层
你是怎么做的?不写出来怎么看有什么问题阿
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-21 08:36:39 | 显示全部楼层

我已经搞定了 呵呵

只是我选择的那个调用号有问题.
其他的都没错.
但是搞的我好郁闷.
呵呵.
以后添加系统调用,最好不要加在最后,而是要加在中间的空闲调用(那些是系统预留的).
比较保险.
呵呵
回复 支持 反对

使用道具 举报

发表于 2005-4-21 13:49:02 | 显示全部楼层
不保险!
系统调用最科学的方法是加在最后!而不用其预留的!除非你自己一个人用!
不然的话!人家在新内核刚好调用了本来预留而现在又用的系统调用!
现在把程序放到你的机器上跑,那你说会有什么问题!
回复 支持 反对

使用道具 举报

发表于 2005-4-21 21:14:23 | 显示全部楼层
Post by watermelon20
只是我选择的那个调用号有问题.
其他的都没错.
但是搞的我好郁闷.
呵呵.
以后添加系统调用,最好不要加在最后,而是要加在中间的空闲调用(那些是系统预留的).
比较保险.
呵呵


那应该是你没做对吧。我都是放在最后,很正常阿 :comp
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-23 12:52:17 | 显示全部楼层

不信你去试试

2.4.21-9.EL
这个版本
你添加在271号
保证做到死都是返回-1
呵呵
有时候人是要变通的。
那些预留的调用号是来升级用的。用完了干脆把它改回来好了。
回复 支持 反对

使用道具 举报

发表于 2005-4-25 10:36:00 | 显示全部楼层
可以很明确的说:
返回-1,并不是调用失败,这个你可以用我下面给的程序试一下!
如果系统调用添加失败返回的应该是“-38”,“-1”表示操作没有许可!
系统调用添加失败!应该和你的内核版本号没有关系!我内核是2.4.20-8应该不会和你的有太大的差别吧!

测试程序:
#include <stdio.h>
#include <unistd.h>
int
main()
{
unsigned long sys_num = 512;//512号系统调用,不存在!用来模拟你的问题
unsigned long value = 0;
__asm__("int $0x80":"=a"(value):"0"((long)(sys_num)));
printf("The value is %ld.\n",value);
return value;
}
////////////////////////
以上程序编译方法为:令文件名是:test.c
gcc -o test test.c
编译后得到
test
你执行看看是不是输出了
The value is -38
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表