URN Logo
UNIX Resources » Linux » China Linux Forum » Linux内核技术 » 第18页 » 获得mounts相关的信息
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.com
  LinuxForum General Chat
  Linux Advocacy
  LinuxForum Polls
  Introductions
  Linux Kernel Support
  Patch Management
  Development Release
  Linux Programming
  Linux Security
  Linux Software
  Linux Hardware Problems
    Linux Video Problems
    Linux Sound Problems
  Linux Networking Support
  Linux Printing Support
  Linux Human Interface Devices Support
  Linux Data Storage Support
  Linux Applications Support
  Linux Installation Support
  Linux Laptops Support
  Linux Motherboard, Chipsets, CPU, Memory
  Miscellaneous
  Debian Linux Support
  Ubuntu Linux Support
  LiveCD Discussions
  Gentoo Linux Support
  Mandrake Linux Support
  Redhat / Fedora Linux Support
  Slackware Linux Support
  SuSE Linux Support
  CentOS Linux Support
  Linux Web Servers
  Linux DNS Servers
  Linux Database Servers
  Linux Email Servers
  Linux FTP Servers
  Linux Squid Proxy Server
  Linux Samba Help
  Linux cPanel Help
  Linux Ensim Help
  Linux Plesk Help
  Linux Webmin / Usermin Help
  Qmail Toaster Help
  Linux Games
  Windows Game Emulation
  Linux Discussions
  General Linux Discussions
  Red Hat Linux Discussions
  More Red Hat Linux Discussions
  Mandrake Linux Discussions
  Slackware Linux Discussions
  SuSE Linux Discussions
  Debian Discussions
  Samba Help
  Linux Security
  Linux Networking
  Gentoo Help
  Operating System Rant Forum
  Hardware Rants
   
获得mounts相关的信息
获得mounts相关的信息 - bychgcc [2007-11-18 21:30 | 1,099 byte(s)]
 
Re: 获得mounts相关的信息 - bychgcc [2007-11-19 15:01 | 3,257 byte(s)]
 
Re: 获得mounts相关的信息 - bychgcc [2007-11-19 15:15 | 1,221 byte(s)]
 
Subject: 获得mounts相关的信息
Author: bychgcc    Posted: 2007-11-18 21:30    Length: 1,099 byte(s)
[Original] [Print] [Top]
我在做一个小练习要求:在字符驱动中获得mounts相关的信息,
例如:在shell $mounts 后看到的信息一致,

现在我的方法是:通过
(1)filp = file_open("/",__, __);
(2)struct vfsmount *tmp_vfs_mnt = filp->mnt_vfsmnt;
(3)
struct list_head *list = container_of(tmp_vsf_mnt, struct vsfmount, mnt_);
list_for_each(p_list,list){
spin_lock(&vfsmnt_lock);
tmp_vfs_mnt = list_enter(p_list, struct vfsmount, root);
prink(KERNEL_ERR"device_name: %s ", tmp_vfs_mnt->mnt_devname);
//get dev name(just test)
//获得设备名 没有问题
//但是 如何获得挂载点 ,文件类型 , 读写权限都有问题?
//我 主要 是 参考内核源代码中的 namespace.c 文件中的 获得 mounts信息 的方法

spin_unlock(&vfsmnt_lock);
}



///////////////////////////////////////////////////////
希望大家给我思路,,
或者谁有其它的 获得mounts信息的方法,还请各位赐教,,呵呵
----
没有翅膀不是天使
[Original] [Print] [Top]
Subject: Re: 获得mounts相关的信息
Author: bychgcc    Posted: 2007-11-19 15:01    Length: 3,257 byte(s)
[Original] [Print] [Top]

#include "mo_info_hdr.h"

#include <linux/spinlock.h>
#include <linux/mount.h>

spinlock_t vfsmnt_lock = SPIN_LOCK_UNLOCKED;

int once_get_mo_info(struct list_head *v);

inline struct file* get_root_filp(void)
{
struct file *filp = filp_open("/", O_RDONLY, S_IRUSR|S_IWUSR);
return (IS_ERR(filp))? NULL : filp;
}


inline struct vfsmount* get_root_vfsmnt(void)
{
struct vfsmount *root_vfsmnt;
struct file *tmp_filp;
if((tmp_filp = get_root_filp()) == NULL){
printk(KERN_ERR"[ get_root_filp ] error! ");
return NULL;
}

return (IS_ERR(root_vfsmnt = tmp_filp->f_vfsmnt))? NULL : root_vfsmnt;
}


struct vfsmount *next_mnt(struct vfsmount *p, struct vfsmount *root)
{
struct list_head *next = p->mnt_mounts.next;
if(next == &p->mnt_mounts){
while(1){
if(p == root)
return NULL;
next = p->mnt_child.next;
if(next != &p->mnt_parent->mnt_mounts)
break;
p = p->mnt_parent;
}
}
return list_entry(next, struct vfsmount, mnt_child);
}


int get_mounts_info(void)
{
struct vfsmount *p_vfsmnt,*root_vfsmnt;
unsigned long flags;

root_vfsmnt = get_root_vfsmnt();

spin_lock_irqsave(&vfsmnt_lock, flags);

for(p_vfsmnt = root_vfsmnt; p_vfsmnt; p_vfsmnt = next_mnt(p_vfsmnt, root_vfsmnt)){
printk(KERN_ERR"%s on", (p_vfsmnt->mnt_devname ? p_vfsmnt->mnt_devname : "none"));
printk(" type %s", p_vfsmnt->mnt_sb->s_type->name);
printk(" (%s) ", p_vfsmnt->mnt_sb->s_flags & MS_RDONLY? "ro": "rw");
}
spin_unlock_irqrestore(&vfsmnt_lock, flags);

return 0;
}
----
没有翅膀不是天使
[Original] [Print] [Top]
Subject: Re: 获得mounts相关的信息
Author: bychgcc    Posted: 2007-11-19 15:15    Length: 1,221 byte(s)
[Original] [Print] [Top]
第一种方法:

获得的next_mounts (vfsmounts)结构体后,如果再想进一步获得文件类型,权限,挂载点等相关信息就难得的多,,
我想可能是锁的问题,因为我拿不到superblock(-->strutc file_system_type{};结构体)锁,以至我无法读取文件类型等信息
虽然第一种方法 可以正常获得 ”设备名“
但是 第一种方法 目前对我来说 ,,还是不 能够 获得我所需要的mounts信息,,

============================================
第二种方法 :

我是参考内核代码fs/namesapce.c 文件中的
struct vfsmount *next_mnt(struct vfsmount *p, struct vfsmount *root)
{}
这个函数,主要是获得下一个 vfsmount的结构体指针,,

============================================
通过 实验 ,,第二种方法 我可以正确获得 设备名 , 文件类型, 权限,(挂载点暂时还没有获得)

但是 后来 我 又想到 两种方法都是 获得 vfsmount的结构体指针,然后就是通过这个vfsmount的指针来进一步获得mounts相关的信息的,至于是锁的原因引起的第一种方法不正确的假设我现在也在怀疑,,
还请大牛们指点一二,,,,,
----
没有翅膀不是天使
[Original] [Print] [Top]
« Previous thread
PCI DMA 操作中的 pci_map_sg()
Linux内核技术
18
Next thread »
web2.0前途在哪里——30家VC寻找2.0项目!!
     

Copyright © 2018 UNIX Resources Network, All Rights Reserved.    About URN | Privacy & Legal | Help | Contact us