- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写我自己的输出流媒体库,我正在尝试模仿 std::ostream 行为,它不会与我试图实现的新行为冲突。目前我正在尝试模仿从 ios 继承的这个界面:
std::ostream::exceptions(ios::iostate state)
根据 cplusplus.com :
“此方法为流设置新的异常掩码并清除流的错误状态标志(就像调用成员 clear() 一样)。”
我不清楚这是否意味着所有标志都将被清除,还是仅清除异常掩码中设置的标志,因此我编写了一个测试程序,但得到了意想不到的结果。这是程序:
#include <sstream>
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
ostringstream oss;
try
{
cout << " badbit = " << ios::badbit << "\n";
cout << " eofbit = " << ios::eofbit << "\n";
cout << " failbit = " << ios::failbit << "\n\n";
cout << " oss.rdstate() = " << oss.rdstate() << "\n";
cout << " oss.exceptions() = " << oss.exceptions() << "\n\n";
cout << "executing: oss.setstate(ios::badbit | ios::failbit);" << "\n";
oss.setstate(ios::badbit | ios::failbit);
cout << " oss.rdstate() = " << oss.rdstate() << "\n";
cout << " oss.exceptions() = " << oss.exceptions() << "\n\n";
cout << "executing: oss.exceptions(ios::failbit);" << "\n";
oss.exceptions(ios::failbit);
cout << " oss.rdstate() = " << oss.rdstate() << "\n";
cout << " oss.exceptions() = " << oss.exceptions() << "\n";
}
catch(const exception& x)
{
cout << endl;
cout << "**** EXCEPTION THROWN ****" << "\n";
cout << argv[0] << ": " << x.what() << endl;
cout << " oss.rdstate() = " << oss.rdstate() << "\n";
cout << " oss.exceptions() = " << oss.exceptions() << "\n";
return 1;
}
catch(...)
{
cerr << argv[0] << ": unknown exception." << endl;
return 1;
}
return 0;
}
这是输出:
matt@dworkin:~/dev/ostream/libs/ostream$ g++ --version
g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
matt@dworkin:~/dev/ostream/libs/ostream$ g++ --std=c++17 foo.cpp
matt@dworkin:~/dev/ostream/libs/ostream$ ./a.out
badbit = 1
eofbit = 2
failbit = 4
oss.rdstate() = 0
oss.exceptions() = 0
executing: oss.setstate(ios::badbit | ios::failbit);
oss.rdstate() = 5
oss.exceptions() = 0
executing: oss.exceptions(ios::failbit);
**** EXCEPTION THROWN ****
./a.out: basic_ios::clear: iostream error
oss.rdstate() = 5
oss.exceptions() = 4
因此,根据 cplusplus.com 文档,我根本没想到会抛出异常。从异常处理程序中生成的输出可以看出,没有任何状态标志被清除。这是编译器错误、文档错误,还是我遗漏了什么?
顺便说一句,与记录的行为相比,我更喜欢展示的行为。对我来说,抛出错误的请求会产生消除现有错误的副作用,这对我来说似乎有点奇怪。实际上,我首先以与 g++ 显然相同的方式实现它(假设这是它肯定会工作的方式),然后才阅读该方法的文档。
最佳答案
cplusplus.com 是错误的。他们是正确的 clear
由 exceptions
调用,但它不被调用来清除状态并且状态不被清除。
不管名称如何,clear
由 iostreams 在后端使用,including setstate
itself , 为流状态的大量设置做繁重的工作,而不仅仅是清除。因此,它是容纳引发异常和其他与标志相关的行为的合乎逻辑的地方。
在exceptions
看来clear
主要用于测试现有标志以在任何所需标志已设置的情况下引发异常。要在异常后实际清除标志,请调用 clear
仍然需要删除错误标志。
关于c++ - C++ 方法 ostream::exceptions(iostate state) 的行为应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54833685/
#include #include #include #include using namespace std; int main() { int ival; while(ci
iostat -x 不显示真实值。如果您运行 iostat -x 1 并查看每秒的值,这是显而易见的。当我运行 iostat -x 1 2 时,我认为我可以通过获取确切的行然后获取值来获得我想要的值。
我有一个案例,我的程序写入磁盘,日志文件可能被某人删除,所以下次写入会失败。我们能否在再次打开文件后通过检查流标志来重复写入操作,而不是在每次写入时检查文件是否打开? 还有性能如何比较(1)Stat
iostat 的输出是这样的: Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz aw
iostat -x -d 可以显示很多i/o统计信息。对于iostat的util,解释是: Percentage of CPU time during which I/O requests were
iostat -xzN 5 | grep "^vg\|^Dev" 产生如下输出: Device: rrqm/s wrqm/s r/s w/s rsec/s
我想监控linux系统的io性能,特别是读性能。iostat 命令为读取和写入组合提供了await 和svctim,这不适合我。 文件/proc/diskstats 在第 1 列中给出了已完成的读取数
作为调试 IO 生成器的一部分,我在 x64 硬件上运行的 RH 6.4 下遇到了一组奇怪的结果(在多个系统上验证): -- 应用程序使用 linux 异步 IO(即非 posix)访问原始磁盘分区(
输入: #iostat -DlR 1 2 输出: root@myserver #iostat -DlR 1 2 System configuration: lcpu=20 drives=2 paths
从下面的iostat URL,我们知道r/s和w/s,假设r/s是1000(可能是由300个序列IO和700个随机IO组成),w/s是500,但是如果有是一个计算或方法知道序列 IO 多少次和 r/s
需要获取 iostat 详细信息并计算“%user %nice %system %iowait %steal %idle”的平均值 我正在使用 awk 来实现相同的目的。 还有其他方法可以实现吗? 最
我像这样从 node.js 应用调用 iostat: var exec = require('child_process').exec; exec('iostat -md', function(err
#!/bin/bash # Start.sh if [[ $# -ne 1 ]] ; then echo 'Usage :' exit 1 fi if [[ $1 -ge 1 ]] ;
我正在编写我自己的输出流媒体库,我正在尝试模仿 std::ostream 行为,它不会与我试图实现的新行为冲突。目前我正在尝试模仿从 ios 继承的这个界面: std::ostream::except
我在 iostat 命令的手册中搜索了关于 %nice.在explanation在 %nice 的值中,有一个关于 nice 优先级的短语。我不明白它的意思,有人可以解释一下吗? 手册页中的完整注释如
我有一个 ofstream 对象,我定期用新文件名重新打开它。我知道 .clear() 会将 iostate 重置为 goodbit。但是,我不太清楚这种状态是否受到 .close 和 .open 的
我正在尝试使用以下命令通过管道传输 iostat、mongostat 等实用程序的输出: $ iostat -d 1 | ./script.py 我在其中使用的代码: for line in sys.
我运行了一个 java 代码,它产生大量的文本文件读写操作。程序源非常简单,在一个循环中我在一个测试文件中写入了 2000 行,然后我再次读取它们只是为了产生大量的磁盘读写操作。但是当程序运行时,我通
在Fortran(代码:块IDE)中执行以下代码时,编译时错误。 PROGRAM file IMPLICIT NONE INTEGER stat OPEN(25,"file.dat",iostat=s
我是一名优秀的程序员,十分优秀!