linux open可以创建设备文件格式,linux设备驱动模型--open系统调用(创建文件)

static struct inode *shmem_get_inode(struct super_block *sb, const struct inode *dir,

int mode, dev_t dev, unsigned long flags)

{

struct inode *inode;

struct shmem_inode_info *info;

struct shmem_sb_info *sbinfo = SHMEM_SB(sb);

if (shmem_reserve_inode(sb))

return NULL;

inode = new_inode(sb);//新建一个i节点

if (inode) {

inode->i_ino = get_next_ino();

inode_init_owner(inode, dir, mode);

inode->i_blocks = 0;

inode->i_mapping->backing_dev_info = &shmem_backing_dev_info;

inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;

inode->i_generation = get_seconds();

info = SHMEM_I(inode);

memset(info, 0, (char *)inode - (char *)info);

spin_lock_init(&info->lock);

info->flags = flags & VM_NORESERVE;

INIT_LIST_HEAD(&info->swaplist);

INIT_LIST_HEAD(&info->xattr_list);

cache_no_acl(inode);

switch (mode & S_IFMT) {//设置i节点的i节点操作和文件操作

default:

inode->i_op = &shmem_special_inode_operations;

init_special_inode(inode, mode, dev);

break;

case S_IFREG:

inode->i_mapping->a_ops = &shmem_aops;

inode->i_op = &shmem_inode_operations;

inode->i_fop = &shmem_file_operations;

mpol_shared_policy_init(&info->policy,

shmem_get_sbmpol(sbinfo));

break;

case S_IFDIR:

inc_nlink(inode);

/* Some things misbehave if size == 0 on a directory */

inode->i_size = 2 * BOGO_DIRENT_SIZE;

inode->i_op = &shmem_dir_inode_operations;

inode->i_fop = &simple_dir_operations;

break;

case S_IFLNK:

/*

* Must not load anything in the rbtree,

* mpol_free_shared_policy will not be called.

*/

mpol_shared_policy_init(&info->policy, NULL);

break;

}

} else

shmem_free_inode(sb);

return inode;

}

个人理解,创建一个文件和文件夹对linux来说没什么区别,都是新建一个i节点和一个目录项对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值