
C
庚庚911
IT 运维一枚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
read()函数的困惑
#define BUF_SIZE 10int main(){ int cnt; char buf[BUF_SIZE]; cnt = read(STDIN_FILENO, buf, BUF_SIZE); printf("cnt = %d\n", cnt); return 0;}给定代码如上所示。编译后运行。...转载 2018-10-28 11:39:45 · 4421 阅读 · 1 评论 -
linux进程调度浅析
操作系统要实现多进程,进程调度必不可少。进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系。所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状态的进程。那么进程调度也就不会太重要。哪个进程可执行,就让它执行去,没有什么需要多考虑的。反...转载 2019-03-06 12:39:13 · 401 阅读 · 0 评论 -
神奇的vfork
一段神奇的代码在论坛里看到下面一段代码:int createproc();int main(){ pid_t pid = createproc(); printf( "%d\n", pid ); exit( 0 );}int createproc(){ pid_t pid; if ( !(pid = vfork() ) ) { printf( "chil...转载 2019-03-06 12:20:02 · 223 阅读 · 0 评论 -
linux进程状态浅析
众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的。linux就是这样的一个操作系统。在linux系统中,每个被运行的程序实例对应一个或多个进程。linux内核需要对这些进程进行管理,以使它们在系统中“同时”运行。linux内核对进程的这种管理分两个方面:进程状态管理,和进程调度。本文主要介绍进程状态管理,进程调度见《lin...转载 2019-03-06 12:03:54 · 226 阅读 · 0 评论 -
linux异步信号handle浅析
在初学linux编程的时候,一直觉得异步信号handle是个很神奇的东西,用户程序可以使用singal之类的系统调用为某某信号注册一个信号处理函数(handle函数)。程序的二进制代码在内存中都有着确定的执行流程,为什么收到异步信号以后,程序会被“中断”,然后跳转到这个handle函数里面去运行呢?内核怎么有能力让程序做这样的跳转呢,总不可能临时修改程序的可执行代码吧?...转载 2019-03-06 11:54:35 · 1098 阅读 · 0 评论 -
Linux 安全的信号处理方式
信号处理的机制 在 Linux 中,每个进程都拥有两个位向量,这两个位向量共同决定了进程将如何处理信号:一个是pending位向量,它包含了那些内核发送给进程,但还没有被进程处理掉的信号。 另一个是blocked位向量,它包含了那些被进程屏蔽掉的信号。 当内核发送一个信号给进程时,它将会修改进程的pending位向量,譬如说,当内核发送一个SIGINT信号给进程,那么它会将进程的p...转载 2019-03-03 12:16:04 · 845 阅读 · 0 评论 -
浅谈 Linux 的 Zero Copy 技术
mmap 文件映射 通常情况下,我们可以使用read()和write()去访问文件,除此之外,Linux 还提供了mmap()系统调用,它可以将文件映射到进程的地址空间,这样程序就可以通过访问内存的方式去访问文件了。那么与read()和write()相比,使用mmap()去访问文件能带来什么好处呢? 使用mmap()一个明显的好处就是减少一次 I/O 拷贝,譬如说,当我们使用read()...转载 2019-03-03 12:11:07 · 613 阅读 · 0 评论 -
Linux系统调用列表(CentOS7_X64)
以下的列表来源于64位的CentOS 7系统,详解链接后面会陆续补充。系统中支持的系统调用列表及编号都定义在 /usr/include/asm/unistd.h文件下。 系统调用号 函数名 源代码 功能简介 起始内核版本 详解链接 0 read fs/read_write.c 读文件内容 ------ Linux...原创 2019-02-20 21:20:27 · 1817 阅读 · 0 评论 -
Linux 系统参数调优 之 文件描述符总数file-max
打开文件数 在 Linux 中,文件描述符是一种资源,为了控制对资源的合理使用,Linux 会限制所有进程所能打开的文件描述符总数。可以通过下面的命令查看:$ cat /proc/sys/fs/file-max99736 通常来说,如果机器的内存越大,那么file-max的默认值也会越大。当然,也可以手动调大它:$ sudo vi /etc/sysctl.co...转载 2019-03-01 12:44:49 · 4347 阅读 · 0 评论 -
Linux TCP/IP 性能调优之 listen()
再谈三次握手 Linux 提供了listen()系统调用,它的作用是在 server socket 上监听新的连接请求:int listen(int sockfd, int backlog); 那么listen()的第二个参数backlog的作用是什么呢?让我们先回顾一下 TCP 的三次握手: 对于 server 来说,一个新的连接首先会经过 SYN_RECV 状态,然后...转载 2019-03-01 12:21:04 · 693 阅读 · 0 评论 -
linux:SUID、SGID详解
一、UNIX下关于文件权限的表示方法和解析SUID 是 Set User ID, SGID 是 Set Group ID的意思。UNIX下可以用ls -l 命令来看到文件的权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 。下面解析一下格式所表示的意思。这种表示方法一共有十位:9 8 7 6 5 4 3 2 1 0- r w x r - x r - x第...转载 2019-02-24 17:53:20 · 478 阅读 · 0 评论 -
linux下使用man命令查看系统调用
我在阅读《linux系统编程》以及查看网上关于系统函数的博客时,老是看到诸如“详细使用请查看man手册”等等。作为linux菜鸟,刚使用linux时,我们都知道可以用man命令来查看linux命令的用法,但是却不知道怎么查看系统调用函数的用法。方法是: man 2 read 或者是man 3 read。中间的数字是什么意思呢?是man的分卷号,原来man分成很多部分,分别是:1 用户...原创 2019-02-24 17:32:46 · 9467 阅读 · 0 评论 -
调整 Linux I/O 调度器优化系统性能
前言Linux I/O 调度器是Linux内核中的一个组成部分,用户可以通过调整这个调度器来优化系统性能。本文首先介绍Linux I/O 调度器的结构,然后介绍如何根据不同的存储器来设置Linux I/O 调度器从而达到优化系统性能。Linux I/O 系统简介Linux I/O调度器(Linux I/O Scheduler)是LinuxI/O体系的一个组件,它介于通用块层和块设备驱动...转载 2019-02-23 11:28:25 · 2144 阅读 · 0 评论 -
Epoll详解及源码分析
Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.youkuaiyun.com/chen19870707 Date:Jan.7th, 2015 1.什么是epollepoll是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和select相似,都...转载 2019-02-17 12:58:20 · 360 阅读 · 0 评论 -
epoll源码分析---sys_epoll_create()函数
eventpoll的优点就不用说了,网上的资料很多,eventpoll的使用也很广泛,特别是在Web服务器中。因为最近要用到epoll,所以好好地看了一下它的实现,把学到的一些东西做下整理,做个记录。一、sys_epoll_create()其源码如下:SYSCALL_DEFINE1(epoll_create, int, size){ if (size <= 0) ...转载 2019-02-17 12:36:39 · 954 阅读 · 0 评论 -
c标准基本库函数:libc、glibc和glib的关系
【glibc 和 libc】 glibc 和 libc 都是 Linux 下的 C 函数库。 libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GUN C 函数库。 ANSI C 和 GNU C 有什么区别呢? ANSI C 函数库是基本的 C 语言函数库,包含了 C 语言最基本的库函数。这个库可以根据头文件划分为 15 个部分,其中包括...转载 2019-02-21 15:35:55 · 1623 阅读 · 0 评论 -
linux内核SMP负载均衡浅析
一 、需求 在《linux进程调度浅析》一文中提到,在SMP(对称多处理器)环境下,每个CPU对应一个run_queue(可执行队列)。如果一个进程处于TASK_RUNNING状态(可执行状态),则它会被加入到其中一个run_queue(且同一时刻仅会被加入到一个run_queue),以便让调度程序安排它在这个run_queue对应的CPU上面运行。一个CPU对应一个r...转载 2019-03-06 12:52:48 · 522 阅读 · 0 评论