请教read()函数
glibc库:在Fileops.c中的定义:# define read(FD, Buf, NBytes) __read (FD, Buf, NBytes)
glibc库:在unistd.h中的定义:extern ssize_t __read (int __fd, void *__buf, size_t __nbytes);
但是我始终没找到 __read()这个函数(或者宏) ,包括内核源码。
问问大家,它怎样到内核的函数的???
glibc库:在unistd.h中的定义:extern ssize_t __read (int __fd, void *__buf, size_t __nbytes);
但是我始终没找到 __read()这个函数(或者宏) ,包括内核源码。
问问大家,它怎样到内核的函数的???
作者: shaohui973 发布时间: 2011-02-17
#define _Fread(str, buf, cnt) _Read((str)->handle, buf, cnt)
_Read 为系统调用 int 0x80 ......
_Read 为系统调用 int 0x80 ......
作者: zd零 发布时间: 2011-02-17
回复 zd零
_ _read()到 int 0x80,是怎么跑到这个int 0x80的???
0x80对应的中断号是128吧? 那这个base+128*4所指向的CS:IP是多少?是那个程序?
_ _read()到 int 0x80,是怎么跑到这个int 0x80的???
0x80对应的中断号是128吧? 那这个base+128*4所指向的CS:IP是多少?是那个程序?
作者: shaohui973 发布时间: 2011-02-17
sys_read, 找找看
作者: amarant 发布时间: 2011-02-17
回复 amarant
在 syscalls.h中 asmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count);也没见着定义处,只有这个声明。还有这个asmlinkage 是什么含义?
在 syscalls.h中 asmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count);也没见着定义处,只有这个声明。还有这个asmlinkage 是什么含义?
作者: shaohui973 发布时间: 2011-02-17
回复 shaohui973
这个是在syscall里面的,有一个表的。你可以百度下系统调用入口
这个是在syscall里面的,有一个表的。你可以百度下系统调用入口
作者: amarant 发布时间: 2011-02-17
刚百度了下,
在内核源码目录下使用下面命令:
grep SYSCALL_DEFINE[0-6]\(XXXX * -R --include=*.c
XXXX可以替换为任何系统调用名。未必能找到所有的,八九不离十吧。至少2.6.32下是这样。
在内核源码目录下使用下面命令:
grep SYSCALL_DEFINE[0-6]\(XXXX * -R --include=*.c
XXXX可以替换为任何系统调用名。未必能找到所有的,八九不离十吧。至少2.6.32下是这样。
作者: amarant 发布时间: 2011-02-17
回复 shaohui973
asmlinkage通知编译器仅从栈中提取该函数的参数。所有的系统调用都需要这个限定词!
asmlinkage通知编译器仅从栈中提取该函数的参数。所有的系统调用都需要这个限定词!
作者: angeltears 发布时间: 2011-02-17
回复 angeltears
仁兄,可以给出read系统调用的详细资料吗???从glic开始,一直到read的系统调用号 _ _NR_read 以及之后怎么调到文件系统的read函数。
仁兄,可以给出read系统调用的详细资料吗???从glic开始,一直到read的系统调用号 _ _NR_read 以及之后怎么调到文件系统的read函数。
作者: shaohui973 发布时间: 2011-02-17