社区
Linux/Unix社区
帖子详情
linux中如何设置写文件超时
xSTONEx
2014-07-13 11:38:31
各位大神,linux中如果向磁盘中写文件时,受到外界因素的干扰使得写入速度变慢,如何设置写超时时间;,当写速度下将时,直接跳出写操作?
另看网上有资料说阻塞、非阻塞模式,我的理解是阻塞模式是你本来想写100字符,但缓存中不足100字符,因此无法返回,非阻塞是有多少写多少,完事返回,与我上述的问题不符,不知理解是否正确。
在线等大神赐教
...全文
718
10
打赏
收藏
linux中如何设置写文件超时
各位大神,linux中如果向磁盘中写文件时,受到外界因素的干扰使得写入速度变慢,如何设置写超时时间;,当写速度下将时,直接跳出写操作? 另看网上有资料说阻塞、非阻塞模式,我的理解是阻塞模式是你本来想写100字符,但缓存中不足100字符,因此无法返回,非阻塞是有多少写多少,完事返回,与我上述的问题不符,不知理解是否正确。 在线等大神赐教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
colddown
2014-07-14
打赏
举报
回复
之前想的应该不对。你的写数据应该先到达page cache,之后write就返回了,不应当block。如果设备很慢,可能导致page cache里有大量dirty page并占用大量内存。你是想解决这个问题吗?
xSTONEx
2014-07-14
打赏
举报
回复
对的,本身产品的CPU到SATA这边的走线就不好,信号质量差,高低温等环境因素干扰的话,情况更糟,但这些因素都是不可改变的,只能在程序里做些牺牲。至于一秒一个字节只是假设,具体是多少也无法检测,总之是很慢,所以才想在很难写入的时候跳出写盘。 我看了下,非阻塞模式是针对l类似socket这样的终端文件描述符,对普通文件应该没用吧。
yuqing89320
2014-07-14
打赏
举报
回复
写入磁盘速度,可以软件控制么,貌似不可已 你说的受外界影响速度变慢,指的时温度过高之类的么 写入调度应该是系统调度控制的吧,不可能一秒只写一个字节,过慢,用select监听应该返回EAGAIN 个人理解,仅供参考
xSTONEx
2014-07-14
打赏
举报
回复
首先感谢楼上的大侠 我简化完程序后,应用层运行两个线程,一个采集数据,一个写数据,当采集线程写满缓存后给写数据线程发信号量, 从测试的结果看运行几个小时后,CPU达到100%,有连续几个释放信号量的打印,没有接收信号量的打印(正常情况释放和接收的打印是交替的) 由此可以看出是在write里一直无法返回。想解决的问题是发生上述情况是让write在规定的时间返回,系统可以正常运行。
colddown
2014-07-14
打赏
举报
回复
非阻塞情况下write应该立即返回。不是很确定用这个方法能解决你的问题,不过可以试试
xSTONEx
2014-07-13
打赏
举报
回复
自己先顶一下
xSTONEx
2014-07-13
打赏
举报
回复
1.select(...);//设置超时时间 . . . 2write(...);//写文件 按上述的步骤,如果写的很慢,write会返回吗? 之前用过select设置过socket的超时收发,但对select工作原理还是理解的不透彻,能详解写吗 谢谢。
colddown
2014-07-13
打赏
举报
回复
对于写文件select应该是当内核缓冲区有空间时返回,如果很久没有返回说明下面的数据传输有问题,导致缓冲区没用空闲,select就可以超时
xSTONEx
2014-07-13
打赏
举报
回复
我也想过用select,但个人理解select设置的超时时间是这样的,比如我原先要写100个字节,但缓存中就50个字节,所以阻塞了,通过select设置的超时时间可以退出,不知道我的理解是否正确 现在遇到的问题是缓存中有100个字节要写,但写盘速度一下变慢了,一秒一个字节(比如 说),此时该怎么做才能设置时间,写不完就不写了呢?
colddown
2014-07-13
打赏
举报
回复
可以用select函数,同时设置超时。如果在超时前文件还未准备好写就可以退出。
Linux
select函数——学习笔记
Linux
select函数 select.c #include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> /* 功能:多路复用 int select(int nfds, fd_set *readfds, fd_set *writefd...
c语言的select函数详解,
linux
select函数详解
在
Linux
中
,我们可以使用select函数实现I/O端口的复用,传递给select函数的参数会告诉内核:•我们所关心的
文件
描述符•对每个描述符,我们所关心的状态。(我们是要想从一个
文件
描述符
中
读或者
写
,还是关注一个描述符
中
是否出现异常)•我们要等待多长时间。(我们可以等待无限长的时间,等待固定的一段时间,或者根本就不等待)从select函数返回后,内核告诉我们一下信息:•对我们的要求已经做好...
c语言select函数作用,
linux
c语言 select函数使用方法
表头
文件
#i nclude#i nclude#i nclude定义函数int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);函数说明select()用来等待
文件
描
写
叙述词状态的改变。參数n代表最大的
文件
描
写
叙述词加1,參数readfds、writefds 和e...
嵌入式 select函数详解
Linux
select() 在 SOCKET 编程
中
还是比较重要的,可是对于初学 SOCKET 的人来说都不太爱用 select()
写
程序,他们只是习惯
写
诸如 conncet()、accept()、recv() 或 recvfrom() 这样的阻塞程序(所谓阻塞方式 block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使
海思Hi3519AV100 emmc模式
Linux
系统移植实战:从SDK编译到Hitool烧
写
全解析
本文详细解析了海思Hi3519AV100在emmc模式下
Linux
系统移植的全过程,从SDK编译到Hitool烧
写
。涵盖了环境准备、交叉编译工具链配置、u-boot适配、镜像生成与验证等关键步骤,并提供了常见问题排查指南和性能优化建议,助力开发者高效完成嵌入式系统开发。
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章