7

に書き込むことにより、テスト スイートで書き込みエラーを生成するのは簡単/dev/fullです。読み取りエラーを生成するための適切な手法はありますか? 私は現在 LD_PRELOAD を使用してオーバーライドしていますreadが、それは複雑すぎて移植性がないようです (/dev/full は移植性がありません...)。

4

4 に答える 4

6

ディレクトリからの読み取りに加えて (前の回答で述べたように) /proc/self/mem、エラーを取得するために読み取りを試みることができます (これによりEIO、Linux でエラーが発生するはずです)。説明については、 https ://unix.stackexchange.com/a/6302 を参照してください。

于 2012-07-06T12:59:14.807 に答える
2

(OS X) read(2) マンページによると、read(2) は、「ディレクトリを読み取ろうとした」場合にエラーを生成します。したがって、ディレクトリを open(2) して (prot が書き込みを許可していないことを確認してください。そうしないと、エラーがスローされます)、そこから読み取りを試みることができます。そこにリストされている唯一のエラーのように見えますが、これは「通常の」状況で発生する可能性があります (つまり、FILE* 構造体を故意に壊すようなことをしなくても)。

C などの read(2) エラーについて話していると思いますが、高水準言語でも、ディレクトリを開いてそこから読み込もうとすることができるかもしれません (私は試してみましたが) Python を使用しており、ディレクトリを開くにはあまりにもスマートです...)

于 2012-06-27T23:59:54.087 に答える
1

無効なポインターをバッファーとして渡して読み取りを行うこともできますが、これは -EFAULT を返します。何かのようなもの :

read(fd, (char *)0, cout);

ありがとう鈴木

于 2012-06-28T02:44:13.777 に答える