我有一个boost::asio异步使用的客户端和服务器.我想添加一些超时来关闭连接,如果出现问题可能会重试.
我最初的想法是,每当我调用一个async_函数时,我也应该deadline_timer在我希望异步操作完成后启动一个到期.现在我想知道在每种情况下是否都是必要的.
例如:
async_resolve大概使用系统的解析器,它具有内置的超时(例如RES_TIMEOUT,resolv.h可能被配置覆盖/etc/resolv.conf).通过添加我自己的计时器,我可能会与用户希望他的解析器工作的方式发生冲突.
因为async_connect,connect(2)系统调用内置了某种超时
等等
那么哪些(如果有的话)async_调用可以保证在"合理"的时间范围内调用它们的处理程序?如果一个操作[can | do]超时,那么处理程序会传递basic_errors::timed_out错误或其他什么?
我正在开发一个从紧凑型闪存和tmpfs运行的嵌入式Linux系统.闪存以只读方式安装,通常应保持这种状态,但偶尔我需要向闪存写入内容.
写入闪存(通过PATA接口)时应该采取哪些预防措施?由于我无法回想起的原因,我正在使用ext4安装的文件系统barrier=1,data=ordered,nodelalloc,noatime,ro是否是一个可怕的想法?系统需要在零干预的情况下快速启动.我很想做tune2fs -c 0 -i 0.这是一个更糟糕的想法吗?
另外,当我写东西时,我显然需要重新安装flash读写,执行写操作,然后重新安装只读.问题是有几个不同的进程(c ++二进制和shell脚本)可能需要这样做.很明显,每个进程不加选择地重新安装文件系统只读它是一个坏主意.
协调这个的最佳方法是什么?flock看起来很有希 这是最好的方式,我需要担心什么?我不希望过时的锁阻止写入或使文件系统无限期写入.
澄清:通过"偶尔"写作,我的意思是系统可以使用多年而不需要写任何东西.什么东西写,它可能是几百字节.与此同时,系统需要承受不可预测的电源循环而无需任何干预.
如果 glob 模式不匹配任何文件,bash将只返回文字模式:
bash-4.1# echo nonexistent-file-*
nonexistent-file-*
bash-4.1#
Run Code Online (Sandbox Code Playgroud)
您可以通过设置nullglobshell 选项来修改默认行为,因此如果没有匹配项,您将获得一个空字符串:
bash-4.1# shopt -s nullglob
bash-4.1# echo nonexistent-file-*
bash-4.1#
Run Code Online (Sandbox Code Playgroud)
那么在 中有一个等效的选项ash吗?
bash-4.1# ash
~ # echo nonexistent-file-*
nonexistent-file-*
~ # shopt -s nullglob
ash: shopt: not found
~ #
Run Code Online (Sandbox Code Playgroud) bash ×1
boost-asio ×1
c++ ×1
embedded ×1
filesystems ×1
linux ×1
locking ×1
scripting ×1
shell ×1
shopt ×1