在kernel space调用系统调用的例子
来源:互联网 发布:javascript解析json 编辑:程序博客网 时间:2024/06/04 19:27
所以的系统调用都是定义在include/linux/syscalls.h 中,例如sys_open
一般来说系统调用都是需要在user space调用的,但是其实在kernel space也可以调用原本应该在user space调用的系统调用.
例如在init/do_mounts.c中就会调用sys_open
void __init change_floppy(char *fmt, ...)
{
struct termios termios;
char buf[80];
char c;
int fd;
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
fd = sys_open("/dev/root", O_RDWR | O_NDELAY, 0);
if (fd >= 0) {
sys_ioctl(fd, FDEJECT, 0);
sys_close(fd);
}
printk(KERN_NOTICE "VFS: Insert %s and press ENTER\n", buf);
fd = sys_open("/dev/console", O_RDWR, 0);
if (fd >= 0) {
sys_ioctl(fd, TCGETS, (long)&termios);
termios.c_lflag &= ~ICANON;
sys_ioctl(fd, TCSETSF, (long)&termios);
sys_read(fd, &c, 1);
termios.c_lflag |= ICANON;
sys_ioctl(fd, TCSETSF, (long)&termios);
sys_close(fd);
}
}
在change_floppy 中直接调用sys_open。
一般来说系统调用都是需要在user space调用的,但是其实在kernel space也可以调用原本应该在user space调用的系统调用.
例如在init/do_mounts.c中就会调用sys_open
void __init change_floppy(char *fmt, ...)
{
struct termios termios;
char buf[80];
char c;
int fd;
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
fd = sys_open("/dev/root", O_RDWR | O_NDELAY, 0);
if (fd >= 0) {
sys_ioctl(fd, FDEJECT, 0);
sys_close(fd);
}
printk(KERN_NOTICE "VFS: Insert %s and press ENTER\n", buf);
fd = sys_open("/dev/console", O_RDWR, 0);
if (fd >= 0) {
sys_ioctl(fd, TCGETS, (long)&termios);
termios.c_lflag &= ~ICANON;
sys_ioctl(fd, TCSETSF, (long)&termios);
sys_read(fd, &c, 1);
termios.c_lflag |= ICANON;
sys_ioctl(fd, TCSETSF, (long)&termios);
sys_close(fd);
}
}
在change_floppy 中直接调用sys_open。
0 0
- 在kernel space调用系统调用的例子
- base-kernel-系统调用
- times系统调用的例子
- iocrl如何从user space调用到 kernel space,
- 如何在arm linux kernel(内核)中添加系统调用
- 窥探 kernel,just for fun --- 系统调用在用户空间的访问
- 窥探 kernel,just for fun --- 系统调用在用户空间的访问
- Kernel系统调用功能分类
- Linux Kernel - mknod系统调用
- Linux Kernel - mount系统调用
- Linux Kernel - open系统调用
- kernel 系统调用----system call
- android 系统调用例子
- 如何给MIPS架构的kernel添加系统调用
- linux kernel中的系统调用是怎么定义的
- 窥探 kernel --- 有关系统调用的几个知识点
- hadoop 2.6 的安装,调试,Yarn ,调用系统的 在Yarn框架下的 mapreduce 例子
- init_machine 在Kernel中被调用的过程
- cookies ,localstorage和sessionstorage对比
- HDFS——如何将文件从HDFS复制到本地
- laravel 5.4 运行 make:auth 报错
- setter方法 、getter方法、点语法、@property
- Linux 指定运行时动态库路径
- 在kernel space调用系统调用的例子
- DB2常用函数一:(字符串)详解
- Android Modbus的实现--Modbus4Android
- Android6.0 移除电池设置
- 关于const的一点个人总结 C++
- IOC容器类对象
- 深入了解startActivity启动流程
- app端UI的制图规范
- 计算几何凸包——NYOJ78圈水池