免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4878 | 回复: 6
打印 上一主题 下一主题

[已解决]unistd.h头文件的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-11 18:37 |只看该作者 |倒序浏览
在一篇介绍系统调用的文章里看到如下一宏定义
_syscall1(time_t,time,time_t *,tloc)
_syscall1宏展开后就是time()系统调用的原型(注:我感觉这里可能应该是系统调用的定义)
time_t time(time_t * tloc)
{
long __res;

__asm__ volatile("int $0x80" : "=a" (__res) : "0" (13),"b" ((long)(tloc)));
do {
if ((unsigned long)(__res) >= (unsigned long)(-125)) {
errno = -(__res);
__res = -1;
}
return (time_t) (__res);
} while (0) ;
}

可是要使用_syscall1这个宏需要加入头文件unistd.h
可是我加入了<unistd.h>之后,编译还是通不过,应该是没有识别_syscall1这个宏
后来发现/usr/include  下的unistd.h文件确实没有这个宏定义
在linux源代码树下的linux-2.6.18\linux-2.6.18\include\asm-i386\unistd.h中才有这个宏定义

gcc一般都是到/usr/include下寻找标准头文件的
为什么源代码树下的unistd.h和/usr/include下的unistd.h不一样呢

[ 本帖最后由 zhuhefang2006 于 2009-2-11 21:55 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-11 18:45 |只看该作者
原帖由 zhuhefang2006 于 2009-2-11 18:37 发表
在一篇介绍系统调用的文章里看到如下一宏定义
_syscall1(time_t,time,time_t *,tloc)
_syscall1宏展开后就是time()系统调用的原型(注:我感觉这里可能应该是系统调用的定义)
time_t time(time_t * tloc)
...


一个是内核头文件, 一个是glibc的头文件. 它们之间有一定的差别.

把内核中的那个头文件拷贝过来, 然后把它包含进你的程序, 就可以了.

论坛徽章:
0
3 [报告]
发表于 2009-02-11 19:09 |只看该作者
等等,你说什么?用 time() 函数的时候包含 <unistd.h>?应该是 <time.h>!
内核归内核,用户归用户……
好好看手册……

论坛徽章:
0
4 [报告]
发表于 2009-02-11 19:22 |只看该作者
_syscall1宏展开后就是time()系统调用的原型(注:我感觉这里可能应该是系统调用的定义)


int 80h 只是软中断指令,是用户态到内核态的入口。80x86 中断门就是拿来给操作系统实现系统调用的。真正的中断处理函数在内核源代码里,应该就是 sys_ 开头的那些。

论坛徽章:
0
5 [报告]
发表于 2009-02-11 21:50 |只看该作者
原帖由 scutan 于 2009-2-11 18:45 发表


一个是内核头文件, 一个是glibc的头文件. 它们之间有一定的差别.

把内核中的那个头文件拷贝过来, 然后把它包含进你的程序, 就可以了.



原来/usr/include/linux/unistd.h中包含的/usr/include/asm/unistd.h 中有_syscall*宏的说明
所以include <linux/unistd.h>也是可以的

论坛徽章:
0
6 [报告]
发表于 2009-02-11 21:54 |只看该作者
原帖由 langue 于 2009-2-11 19:09 发表
等等,你说什么?用 time() 函数的时候包含 ?应该是 !
内核归内核,用户归用户……
好好看手册……


呵呵,我不是为了调用time()而想加入time()的原型说明
我只是为了了解一下系统调用,故意通过_syscall*来声明一下time()系统调用

论坛徽章:
0
7 [报告]
发表于 2009-02-11 22:01 |只看该作者
看不太懂~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP