write(int fd, void *ptr, size_t count)関数の実行時、count 未満の書き込みをfdに行う方法ってありますか??
現在、write()を使ったプログラムを書いてまして。その過程で、「書き込みは成功するけど、第三引数byte未満の書き込みしかできなかった」という状況のエラー処理をテストする方法がわからなくて困っております。
以下のコードのコメント部分をテストする方法がわかりません。
C++
1#include <iostream> 2#include <unistd.h> 3#include <fcntl.h> 4 5int main() 6{ 7 int fd = open("testFile", O_CREAT | O_RDWR | O_TRUNC, S_IRWXU); 8 char *ptr = "0123456789"; 9 10 int ret = write(fd, ptr, 10); 11 if (ret == -1) 12 { 13 std::cout << "書き込み失敗" << std::endl; 14 } 15 else if (ret < 10) 16 { 17 //ここに入るパターンをテストできない(T T) 18 std::cout << "書き込み不足" << std::endl; 19 } 20 else 21 { 22 std::cout << "書き込み成功" << std::endl; 23 } 24}
man page を見ると、
書き込まれるバイト数は count よりも小さくなることがある。 例えば、書き込み対象の物理メディアに十分な領域がない場合、 リソース上限 RLIMIT_FSIZE に達した場合 (setrlimit(2) 参照)、 count バイト未満の書き込みが行われた後で 呼び出しがシグナルハンドラーにより割り込まれた場合、 などである。
とあるんですが、「これって再現するのめちゃむずくない...」 となっています。
うまくwirte をテストする方法などありませんか?
自分で考えたこと
open() でファイルの書き込み可能最大数を指定してファイルをopenまたはcreateできれば、writeの実験できるなぁと思いましたが、その方法もわからず…
力を貸してください!!!!!1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/04 09:19
2021/04/04 12:52