Linux系统编程:验证kernel内核缓存区大小->4096字节

Linux系统编程:验证kernel内核缓存区大小->4096字节

【Linux编程】 同时被 2 个专栏收录
18 篇文章 0 订阅
143 篇文章 7 订阅

使用的API

read/write函数 常常被称为Unbuffered IO。指的是无用户缓存区。但不保证不使用内核缓存区。我们可以用来验证内核缓存区的大小是不是4096字节。这里我们还用一个系统函数 dup2 文件描述符重定向函数,来实现 从终端输入 直接输出到文件中。

验证内核缓存区大小

思路很简单,就是测试4096这个临界点

首先往文件中写4096个字节,查看数据是否写入到磁盘文件,从终端读入数据,缓存区4096数据是否写到磁盘文件

代码


       
       
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <fcntl.h>
  5. int main(void)
  6. {
  7. int fd = open( "temp.txt",O_RDWR|O_CREAT|O_TRUNC, 0664);
  8. char temp[ 1024]={ 0};
  9. dup2(fd,STDOUT_FILENO);
  10. //文件重定向后,往终端输出的数据,会写入的文件中
  11. //先写4096B试试,看看能写入磁盘不
  12. for( int i = 0; i < 4096;i++)
  13. {
  14. printf( "%c", 48);
  15. }
  16. //kernel缓存区大小为4096!写到4097字节,缓冲区溢出才会将缓冲区内容写道磁盘文件,
  17. //缓存区继续放数据
  18. while( 1)
  19. {
  20. //读取终端数据
  21. read(STDIN_FILENO,temp, sizeof(temp));
  22. if( strncmp(temp, "exit", 4)== 0)
  23. break;
  24. printf( "%s\n",temp);
  25. }
  26. close(fd);
  27. return 0;
  28. }

启动程序查看文件数据

程序启动,写入4096字节,但是文件数据却没有


终端写入数据并查看




退出程序及验证结果

验证结果,写到4097个字节,内核缓存区要溢出了,才将缓冲区内容写到磁盘中去,再将数据写到内核缓存区,等待下一次缓存区满或者文件关闭 才会将缓存区内容写到磁盘



</article>
  • 4
    点赞
  • 4
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

linux 内核 缓冲区设置, linux 内核中socket读取和接收的 缓冲区 大小
#include int main(void){int socketFd;if ((socketFd = socket(PF_I NET, SOCK_ST REAM,0)) < 0){/* 获取socket发送和接收 缓冲区大小 */optlen = sizeof(snd_size); err = getsockopt(socketFd, SOL_SOCKET, SO_SNDBUF, &s...
  <textarea class="comment-content" name="comment_content" id="comment_content" placeholder="请发表有价值的评论, 博客评论不欢迎灌水,良好的社区氛围需大家一起维护。" maxlength="1000"></textarea>
		<div class="comment-emoticon"><img class="comment-emoticon-img" data-url="https://csdnimg.cn/release/blogv2/dist/pc/img/" src="https://csdnimg.cn/release/blogv2/dist/pc/img/emoticon.png" alt="表情包"></div> 
  <span class="comment-emoticon-tip">插入表情</span>
  <div class="comment-emoticon-box" style="display: none;">
    <div class="comment-emoticon-img-box"></div>
		</div>
  <div class="opt-box">
			<div id="ubbtools" class="add_code">
				<a href="#insertcode" code="code" target="_self"><i class="icon iconfont icon-daima"></i></a>
			</div>
			<input type="hidden" id="comment_replyId" name="comment_replyId">
			<input type="hidden" id="article_id" name="article_id" value="79811223">
			<input type="hidden" id="comment_userId" name="comment_userId" value="">
			<input type="hidden" id="commentId" name="commentId" value="">
			<div class="dropdown" id="myDrap">
				<a class="dropdown-face d-flex align-items-center" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
					<div class="txt-selected text-truncate">添加代码片</div>
					<svg class="icon d-block" width="200px" height="100.00px" viewBox="0 0 2048 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M597.33333292 298.666667h853.333334L1023.99999992 725.333333 597.33333292 298.666667z"></path></svg>
				</a>
				<ul class="dropdown-menu" id="commentCode" aria-labelledby="drop4">
					<li><a data-code="html">HTML/XML</a></li>
					<li><a data-code="objc">objective-c</a></li>
					<li><a data-code="ruby">Ruby</a></li>
					<li><a data-code="php">PHP</a></li>
					<li><a data-code="csharp">C</a></li>
					<li><a data-code="cpp">C++</a></li>
					<li><a data-code="javascript">JavaScript</a></li>
					<li><a data-code="python">Python</a></li>
					<li><a data-code="java">Java</a></li>
					<li><a data-code="css">CSS</a></li>
					<li><a data-code="sql">SQL</a></li>
					<li><a data-code="plain">其它</a></li>
				</ul>
			</div>
			<div class="right-box" id="rightBox" data-type="2">
						<span id="tip_comment" class="tip">还能输入<em>1000</em>个字符</span>
						<a data-report-click="{&quot;mod&quot;:&quot;1582594662_003&quot;,&quot;spm&quot;:&quot;1001.2101.3001.4227&quot;,&quot;ab&quot;:&quot;new&quot;}"><input type="submit" class="btn btn-sm btn-comment" value="发表评论"></a>
			</div>
		</div>
	</form>
	<input type="button" class="bt-comment-show" value="评论">
</div>
<div class="comment-list-container">
	<a id="comments"></a>
	<div class="comment-list-box"></div>
	<div id="commentPage" class="pagination-box d-none" style="display: block;"></div>
	
</div>
linux 文件 缓存 大小设置, Linux文件读写机制及优化方式...
1-27
本文只讨论 Linux下文件的读写机制,不涉及不同读取方式如 read,f read,cin等的对比,这些读取方式本质上都是调用 系统api read,只是做了不同封装。以下所有测试均使用open, read, write这一套 系统api。
linux文件 缓存 大小, Linux 文件 缓存 (一)_yuwennaxiansh...
1-14
linux文件 缓存 大小, Linux 文件 缓存 (一) 缓存印象 缓存给人的感觉就是可以提高程序运行速度,比如在桌面环境中,第一次打开一个大型程序可能需要10秒,但是关闭程序后再次打开可能只需5秒了。这是因为运行程序需要的代码、数据文件在操作...
可算是有文章,把 Linux零拷贝讲透彻了!
06-25 406
击上方“朱小厮的博客”,选择“设为星标”后台回复"加群",加入组织来源:22j.co/brVn本文探讨 Linux 中主要的几种零拷贝技术以及零拷贝技术的适用场景。为了迅...
缓冲区 大小及限制
TCP输出 下图展示了应用进程写数据到TCP套接口的过程。

每一个TCP套接口有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这个缓冲区大小。当应用程序调用write时,内核从应用程序进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用程序的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被…


linux文件 缓存 大小设置,[ Linux流操作]使用setvbuf 函数...
1-9
p rintf("文件描述符为 %d\n", fileno(stdin)); //输出文件描述符 if(setvbuf(stdin,buf,_IOFBF,SIZE)!=0) { //将标准输入的 缓冲类型设为全 缓冲, 缓存 大小为512 p rintf("将标准输入stdin设置为全 缓冲失败!\n"); ...
linux文件 缓冲 大小, Linux文件 缓冲区详解_我有个臭宝的博客
2-3
linux文件 缓冲 大小, Linux文件 缓冲区详解 A) 缓冲区机制 根据应用程序对文件的访问方式,即是否存在 缓冲区,对文件的访问可以分为带 缓冲区的操作和非 缓冲区的文件操作: a)带 缓冲区文件操作:高级标准文件I/O操作,将会在用户空间中自动为正在...
linux下socket 内核 缓冲区大小
11-29 2892
本次尝试主要研究 linux socket接受发送 缓冲区大小,以及当 缓冲区阻塞时,能发送多少数据。

(1)实验与尝试

测试环境: vmware虚拟机 centos7系统

服务端建立连接后睡眠,应用层不接受任何数据,只有内核接受缓冲区才接受数据。

服务端代码如下:

#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt…


linux 目录 大小 4096, Linux 块与文件 大小
EXT2格式 块 大小为1024 字节的话,单一文件最大容量是16GB,块 大小4096 字节的话,单一文件最大容量为2TB如果你愿意,看看 kernel源代码吧位置: ~/fs/ext2/supp er.c看这个 函数:C/C++ code/* * Maximal file size. Th ere is a di rect, and {,double-,t riple-}indi rect * block lim...
Linux终端设置 缓存 大小, Linux调优方案,sysctl.conf的设置
1-12
对于Apache、Nginx等服务器,以上几行参数的设置可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
linux 设置 缓存_xiaoshu611的博客
2-2
linux 设置 缓存 手动清除centos内存1.f ree -m2.cat /proc/sys/vm/drop_caches3.echo3> /proc/sys/vm/drop_caches4.sysctl -p xiaoshu611
linux read 函数详解及应用
ssize_t read(int fd, void *buf, size_t count); 参数: fd:文件描述符 buf:存数据的 缓冲区

count:缓冲区大小

返回值:
0:读到文件末尾。

成功; > 0 读到的字节数。

失败: -1, 设置 errno

-1: 并且 errno = EAGIN 或 EWOULDBLOCK, 说明不是read失败,而是read在以非阻塞方式读一个设备文件(网络文件),并且文件无数据。




修改 Linux 内核的p rintk 缓冲区(log 缓冲区大小
08-17 1302
 我们可以用p rintk打印 kernel的日志信息(即log信息),根据时间戳可以判断 内核新打印的log会覆盖掉以前打印的log。原因是 内核用环形 缓冲区存放打印的log信息。那么如何增大 缓冲区大小呢? 我们看 kernel/p rintk.c的代码

#define LOG_ALIGN alignof(struct printk_log)  
#define _


linux文件 缓冲 大小,python – Linux上文件的默认 缓冲区 大小
1-26
理论上说,这也使得 系统可以在这里做一些聪明的事情,比如选择基于文件文件 系统的块 大小的bufsize,甚至基于运行的统计数据,尽管它看起来不像 linux / g libc ,F reeBSD或OS X除了使用常量之外还要做任何事情.很可能是因为对大多数应用程序来...
linux设置vfs 缓存 大小,[ LINUX]VFS高速 缓存的实现方式...
1-3
inode之上就某个文件 系统超级块(包含了该文件 系统的详细信息,即inode是相对于文件 系统的概念,每个文件 系统有一套自己的inode)。 ②高速 缓存: 别于之前的就是,高速 缓存并不对应于某一个文件 系统,而是总的概念。时 内核中的一段内存,...
linux 内核 缓冲区设置,(转)限制 Linux中 buff er/cache ( 缓冲区 缓存)的 大小
限制 Linux缓冲区 缓存大小有没有办法告诉 Linux 内核只使用一定比例的内存用于 缓冲区 缓存?我知道/proc/sys/vm/drop_caches可用于临时清除 缓存,但是有任何永久设置可以防止它增长到超过例如50%的主存?我想要这样做的原因是,我有一台运行Ceph OSD的服务器,它不断地从磁盘提供数据,并设法在几个小时内将整个物理内存用作 缓冲区 缓存。同时,我需要运行将分配大量(几十GB)物理...
linux文件 缓冲 大小,确定在 Linux中读取文件的最佳 缓冲区 大小
我正在编写一个从stdin读取并写入stdout的C程序。但它会 缓冲数据,以便仅在读取特定数量的 字节后才执行写操作(= SIZE)#include#include#defi ne SIZE 100int main(){char buf[SIZE];int n=0;//p rintf("Block size = %d\n", BUFSIZ);while( ( n = read(0, buf, sizeo...
Linux进程 缓冲区 大小,限制 Linux缓冲区 缓存大小_行...
1-3
由于您使用了“内存页面故障”一词,所以我想您对操作设计和虚拟内存已经很熟悉了。我很难想象一个情况/应用程序会如此严重地发生故障,以致无法读取大量的I / O-几乎总是从您要限制的 缓冲区高速 缓存中读取。
如何获取/设置socket对应的 内核 缓冲区(发送 接收)的 大小
11-14 433
如何获取/设置socket对应的 内核 缓冲区(发送 接收)的 大小
C 标准库IO 缓冲区 内核 缓冲区(一)
08-25 3941
1.C标准库的I/O 缓冲区 

        UNIX的传统 是Everything is a file,键盘、显示器、串口、磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也可以像普通文件(保存在磁盘上的文件)一样打开、读、写和关闭,使用的函数接口是相同的。用户程序调用C标准I/O库函数读写普通文件或设备,而这些库函数要通过系统调用把读写请求传给内核
,最终由内


Linux】—— Linux下的文件 缓冲区
缓冲区机制 根据应用程序对文件的访问方式,即是否存在 缓冲区,对文件的访问可以分为带 缓冲区的操作和非 缓冲区的文件操作:

a)带缓冲区文件操作:高级标准文件I/O操作(eg:C库定义的fwrite和fread已经printf函数),将会在用户空间中自动为正在使用的文件开辟内存缓冲区

b)非缓冲区文件操作:低级文件I/O操作(eg:系统接口readwrite),读写文件时,不会开辟对文件操作…


深度解析 Linux系统文件IO+文件描述符+输出重定向+ 缓冲区
04-17 71
系统文件IO 采用 系统接口来进行文件访问 接口介绍 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); pathname: 要打开或创建的目标文件

flags: 打开文件时,可以传入多个参数选项,用下


Linux 输出流重定向 缓冲设置
问题描述我写了一个 Linux程序,程序很简单,源码如下:#include <stdio.h> #include <unistd.h> int main() { for(int i = 0; i < 10;i++) p rintf("h ello world\n"); sleep(1000000); retu rn 0; }在终端上执行时,打印出期望的信息:
linux 重定向 log 大小, Linux标准重定向
最新发布
一切皆文件,都是文件的操作三种I/O设备标准的输入输出程序:指令 数据读入数据:Input输出数据:Output 系统中打开一个文件 系统自动分配文件描述符,除了0,1,2是固定的,其他的都是不固定的打开的文件都有一个fd:file desc riptor (文件描述符) Linux给程序提供三种I/O设备标准输入 (STDIN) -0 默认接受来自终端窗口的输入标准输出 (STDOUT) -1 默认输出...
如何获取/设置socket对应的 内核 缓冲区(发送,接收)的 大小
热门推荐
02-13 2万+
前面我们讲过 内核 缓冲区和应用程序 缓冲区, 在本文中, 我们仅仅讨论 内核 缓冲区, 下面, 我们来看程序: #include #include #pragma comment( lib, "ws2_32. lib")

int main()
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(1, 1)


Linux 内核有多大体积, Linux之父: Linux 内核体积臃肿必须瘦身
据媒体报道,在周一举行的 LinuxCon技术大会上, Linux操作 系统创始人、素有“ Linux之父”之称的林纳斯·托瓦尔兹( Linus Torvalds)表示,目前 Linux 内核体积越来越大,功能也越来越复杂,虽然此举使后续代码整合工作更为容易,但目前当务之急,还是应该对 Linux 内核进行“瘦身”,使其 内核能够更为简洁。托瓦尔兹说:“目前 Linux 内核体积很大,这确实是个问题。我15年前所预想的...
©️2022 CSDN 皮肤主题:酷酷鲨 设计师:CSDN官方博客 返回首页

最新评论

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值