/* * linux/fs/minix/symlink.c * * Copyright (C) 1991, 1992 Linus Torvalds * * minix symlink...handling code */ #ifdef MODULE #include linux/module.h> #endif #include #include...linux/errno.h> #include linux/sched.h> #include linux/fs.h> #include linux/minix_fs.h> #include...linux/stat.h> static int minix_readlink(struct inode *, char *, int); static int minix_follow_link(
/* * linux/fs/minix/bitmap.c * * Copyright (C) 1991, 1992 Linus Torvalds */ /* bitmap.c contains...the code that handles the inode and block bitmaps */ #ifdef MODULE #include linux/module.h> #endif...#include linux/sched.h> #include linux/minix_fs.h> #include linux/stat.h> #include linux/kernel.h...bh = get_hash_table(sb->s_dev,block,BLOCK_SIZE); if (bh) bh->b_dirt=0; brelse(bh); // 算出在文件系统内块数...\n",ino); mark_buffer_dirty(bh, 1); } // 在inode对应的文件系统对应的硬盘中新增一个inode节点,并在内存申请一个对应的inode结构 struct inode
/* * linux/fs/minix/inode.c * * Copyright (C) 1991, 1992 Linus Torvalds */ #ifdef MODULE #include...linux/module.h> #include linux/version.h> #else #define MOD_INC_USE_COUNT #define MOD_DEC_USE_COUNT...#endif #include linux/sched.h> #include linux/minix_fs.h> #include linux/kernel.h> #include linux.../mm.h> #include linux/string.h> #include linux/stat.h> #include linux/locks.h> #include <asm/system.h...\n"); return s; } // 显示minix文件系统的参数,块数、可用数、文件名长度等 void minix_statfs(struct super_block *sb, struct
这里分析的是file结构体的管理。.../* * linux/fs/file_table.c * * Copyright (C) 1991, 1992 Linus Torvalds */ #include linux/fs.h...> #include linux/string.h> #include linux/mm.h> struct file * first_file; int nr_files = 0; // 双向循环链表
/* * linux/fs/minix/namei.c * * Copyright (C) 1991, 1992 Linus Torvalds */ #ifdef MODULE #include...linux/module.h> #endif #include linux/sched.h> #include linux/minix_fs.h> #include linux/kernel.h...> #include linux/string.h> #include linux/stat.h> #include linux/fcntl.h> #include linux/errno.h>...b_data + *offset); // 指向下一个目录项,s_dirsize表示一个目录项的大小 *offset += info->s_dirsize; // 参数校验,s_namelen是该文件系统对文件名的长度限制
文章目录 1.前言 2.深入理解 Linux 文件系统 2.1 inode 与 block 详解 (1) inode 和 block 概述 (2) inode 内容 (3) 查看文件的 inode 号码...Linux 日志文件分析 3.1 日志简介 3.2 常见的一些日志文件 (1) 内核及公共消息日志 (2) 计划任务日志 (3) 系统引导日志 (4) 邮件系统日志 (5) 用户登录日志 3.3 日志消息的级别...3.4 rsyslog 日志管理服务 3.5 日志分析工具 3.6 日志轮替 — logrotate 4.总结 ---- 1.前言 Linux,全称 GNU/Linux,是一套免费使用和自由传播的类...2.深入理解 Linux 文件系统 2.1 inode 与 block 详解 (1) inode 和 block 概述 文件是存储在硬盘上的,硬盘的最小存储单位叫做 “扇区” (sector),每个扇区存储...Linux 日志文件分析 3.1 日志简介 Linux 系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。
继上一篇 Linux epoll 源码分析 1,我们来继续看下 epoll_ctl 方法。...// include/linux/poll.h static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address...限于篇幅原因,ep_remove和ep_modify方法我们会在下一篇文章中分析。
Linux下的tcp编程中,第一步就是要创建socket,本文将从源码角度看下socket是如何被创建的。...-45.48 有关如何找到当前运行的Ubuntu版本对应的内核源码,请参考 找到运行的Ubuntu版本对应的内核源码。...在看具体的源码分析之前,最好先看下socket的man文档,这样能对socket api有个大概的了解。...// include/linux/fs.h struct file_operations { ......有关epoll的源码分析,请参见 Linux epoll 源码分析 1 Linux epoll 源码分析 2 Linux epoll 源码分析 3 5.
本文将从源码角度分析epoll的实现机制,使用的内核版本为 ➜ bionic git:(ffdd392b8196) git remote -v origin git://git.launchpad.net.../~ubuntu-kernel/ubuntu/+source/linux/+git/bionic (fetch) origin git://git.launchpad.net/~ubuntu-kernel.../ubuntu/+source/linux/+git/bionic (push) ➜ bionic git:(ffdd392b8196) git status HEAD detached at Ubuntu...-4.15.0-45.48 有关如何找到对应的内核源码,请参考 找到运行的Ubuntu版本对应的内核源码。...至此,epoll_wait 方法也分析完毕。 有关 epoll_ctl 方法及其他epoll内容,我们会在另起文章再来分析。
一、基本结构 1 缓冲区 unix socket是基于文件系统和缓冲区实现的,内核中有个缓冲区队列unix_datas,长度取决于socket数量。...socket *socket; /* socket we're bound to */ int protocol; struct sockaddr_un sockaddr_un;//unix是基于文件系统实现的...unix_proto_getname, unix_proto_read, unix_proto_write, unix_proto_select, unix_proto_ioctl }; 二、建立连接源码分析...buf = NULL; upd->bp_head = upd->bp_tail = 0; } } --upd->refcnt; } 三、读发送接收源码分析...连接是通过文件系统路径来绑定的,读写数据是通过两个缓冲区来实现的。 Unix Socket与Pipe的不同在于Pipe是单缓冲区,只能用于单向通信,而Unix Socket是双缓冲区,能够双向通信。
// net/socket.c SYSCALL_DEFINE2(listen, int, fd, int, backlog) { struct socket...
上面的文章已经分析了tcp建立的整个过程,下面我们来看下write是如何实现tcp写的。...// include/linux/fs.h static inline ssize_t call_write_iter(struct file *file, struct kiocb *kio,
Linux内核源码分析方法 一、内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。...我也是通过一个项目接触了Linux内核源码的分析,从源码的分析工作中,我受益颇多。除了获取相关的内核知识外,也改变了我对内核代码的过往认知: 1.内核源码的分析并非“高不可攀”。...内核源码分析的难度不在于源码本身,而在于如何使用更合适的分析代码的方式和手段。...目前的Linux源码会把模块相关的文档说明保存在源码目录的documention的文件夹下,如果待分析的模块没有文档说明,这多少会增加定位关键源码文件的难度,但是不会导致我们找不到我们要分析的源码。...源码定位也比较关键,找到一部分源码文件是分析源码的基础。 第三步:简单注释 在已定位好的源码文件中,分析每个变量、宏、函数、结构体等代码元素的大致含义和功能。
之前的文章已经分析了tcp的建立过程以及tcp读和写,下面我们继续看下shutdown方法。
/* * linux/mm/memory.c * * (C) 1991 Linus Torvalds */ /* * demand-loading started 01.12.91 -...invalidate()"s - I wasn't doing enough of them. */ #include #include #include linux.../sched.h> #include linux/head.h> #include linux/kernel.h> volatile void do_exit(long code); static
我的源码分析,是基于Linux Kernel 4.4.19 (https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.4.19.gz)版本的,由于namespace...初始化完成处理信息 调用 wake_up_new_task 将子进程加入调度器,为之分配 CPU 如果是 vfork,父进程等待子进程完成 exec 替换自己的地址空间 ##copy_process源码分析...###sched_fork源码分析 linux-4.4.19/kernel/sched/core.c #2187 int sched_fork(unsigned long clone_flags, struct...return 0; } 我们可以看到sched_fork大致完成了两项重要工作,一是将子进程状态设置为 TASK_RUNNING,二是为其分配 CPU ###copy_thread_tls源码分析...return PTR_ERR(new_ns); tsk->nsproxy = new_ns; return 0; } ###Create_new_namespaces源码分析
在上一篇文章 Linux epoll 源码分析 2 中,我们分析了 epoll_ctl 的 ep_insert 方法,在这里我们继续看下 ep_remove 和 ep_modify 方法。
在linux下,假设我们想打开文件/dev/tty,我们可以使用系统调用open,比如: int fd = open("/dev/tty", O_RDWR, 0); 本文将从源码角度看下,在linux内核中...// include/linux/fs.h struct filename { const char *name; /* pointer to actual...限于篇幅原因,本文暂且分析到这,下一篇继续分析vfs_open方法。 完。
// net/socket.c SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr...
上一篇文章我们分析了shutdown方法的实现,这里我们再看下close方法。
领取专属 10元无门槛券
手把手带您无忧上云