// net/socket.c SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr...
在上一篇文章 Linux epoll 源码分析 2 中,我们分析了 epoll_ctl 的 ep_insert 方法,在这里我们继续看下 ep_remove 和 ep_modify 方法。
上一篇文章我们分析了shutdown方法的实现,这里我们再看下close方法。
在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方法。 完。
/* * 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 #include #include 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内核源码分析方法 一、内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。...我也是通过一个项目接触了Linux内核源码的分析,从源码的分析工作中,我受益颇多。除了获取相关的内核知识外,也改变了我对内核代码的过往认知: 1.内核源码的分析并非“高不可攀”。...如果我们理清代码模块的整体设计思路,再去分析代码的实现,可能分析源码就是一件轻松快乐的事情了。 针对这些问题,我个人是这样理解的。...因为信息搜集的越全面,之后分析代码的过程能使用的信息就更多,分析过程的困难就会越小。 这里举一个简单的例子,假定我们要分析Linux的变频机制实现的代码。...一本是《Linux内核的设计与实现》,该书为读者快速精简的介绍了Linux内核的主要功能和实现。
上面的文章已经分析了tcp建立的整个过程,下面我们来看下write是如何实现tcp写的。...// include/linux/fs.h static inline ssize_t call_write_iter(struct file *file, struct kiocb *kio,...return err; } EXPORT_SYMBOL_GPL(tcp_sendmsg_locked); 终于到了实现真正写逻辑的方法,我们来看下这个方法。 方法描述 1.
之前的文章已经分析了tcp的建立过程以及tcp读和写,下面我们继续看下shutdown方法。
本文将从源码角度分析epoll的实现机制,使用的内核版本为 ➜ bionic git:(ffdd392b8196) git remote -v origin git://git.launchpad.net...-4.15.0-45.48 有关如何找到对应的内核源码,请参考 找到运行的Ubuntu版本对应的内核源码。...这样不同类型的文件,就可以有不同的函数实现 const struct file_operations *f_op; ... // struct file 里的数据字段存放的是所有file...该方法的实现后面我们会讲到。 3. 初始化完wait变量之后,把它放到eventpoll的wq队列中,这个上面我们也有提到过。 4....至此,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 }; 二、建立连接源码分析.../ dprintf(1, "UNIX: create: allocated data 0x%x\n", upd); return(0); } 2 bind unix socket是基于文件系统实现的...buf = NULL; upd->bp_head = upd->bp_tail = 0; } } --upd->refcnt; } 三、读发送接收源码分析
// net/socket.c SYSCALL_DEFINE2(listen, int, fd, int, backlog) { struct socket...
connect方法对应的内核源码为 // net/socket.c SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr
Linux下的tcp编程中,第一步就是要创建socket,本文将从源码角度看下socket是如何被创建的。...在看具体的源码分析之前,最好先看下socket的man文档,这样能对socket api有个大概的了解。...在看sock_create实现之前,我们先看下sock_map_fd方法。...epoll的通知就是用这些回调来实现的。...有关epoll的源码分析,请参见 Linux epoll 源码分析 1 Linux epoll 源码分析 2 Linux epoll 源码分析 3 5.
继上一篇 Linux epoll 源码分析 1,我们来继续看下 epoll_ctl 方法。...// include/linux/poll.h static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address...在看 ep_poll_callback 方法的具体实现之前,我们回头再看下 tcp_poll 方法的剩余内容。...限于篇幅原因,ep_remove和ep_modify方法我们会在下一篇文章中分析。
accept方法对应的内核源码为 // net/socket.c SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr
上一篇文章我们介绍了write是如何实现tcp写的,现在我们来看下read是如何实现tcp读的。...之后又调用call_read_iter方法,传入这些新的参数,继续执行read逻辑 // include/linux/fs.h static inline ssize_t call_read_iter...return copied; ... } EXPORT_SYMBOL(tcp_recvmsg); 这个方法就是真正实现read逻辑的地方了,我们来好好看下。 方法描述 1....当tcp层收到数据后,会将数据放到sk->sk_receive_queue队列中,等待用户读取,该部分逻辑的详细分析,我们以后会另开文章详细讲解。 7.
至此,整个open逻辑就已分析完毕。 完。
前两篇文章中我们讲到,shutdown和close方法会发送fin消息给对方,开始tcp连接的关闭流程,现在我们从源码角度看下tcp连接关闭的具体过程,以及中间发送的消息和涉及到的各种状态。
本文以x86_64平台为例,分析linux下的系统调用是如何被执行的。...假设目标系统调用是write,其对应的内核源码为: // fs/read_write.c SYSCALL_DEFINE3(write, unsigned int, fd, const char __user...最开始整个数组都初始化为sys_ni_syscall,该方法内会返回错误码ENOSYS,表示对应的方法未实现。...有兴趣的可以分析并执行下下面的汇编代码,好好体会下整个系统调用的流程。...,下篇文章我们结合对应的c源码,看下user space的部分是如何实现的。
领取专属 10元无门槛券
手把手带您无忧上云