[過去ログ] Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
531(3): デフォルトの名無しさん [sage] 2016/07/12(火) 20:10:31.38 ID:Eu9k9lZN(1) AAS
Ruby 2.1でデバイスファイルを開いた時にサイズなどの情報を取得することは出来ないのでしょうか?
seek(0, IO::SEEK_END)、size、statは全て通りません
>type test.rb
open("\\\\.\\PHYSICALDRIVE0", "rb"){|f|
f.seek(0, IO::SEEK_END)
p f.stat
p f.size
p f.pos
}
>ruby test.rb
test.rb:2:in `seek': Invalid argument @ rb_io_seek - \\.\PHYSICALDRIVE0 (Errno::EINVAL)
from test.rb:2:in `block in <main>'
from test.rb:1:in `open'
from test.rb:1:in `<main>'
プラットフォーム固有の手段(WindowsならWMI、PC UNIXならlsblkなど)を使えば取得できますが
出来ればそれは避けたいので・・・
532: デフォルトの名無しさん [] 2016/07/12(火) 23:16:54.90 ID:O9LM8Fab(1) AAS
>>531
Rubyに限定されない一般論として:
デバイスファイル(物理ドライブ)から取得できるサイズとして、
いったいぜんたい何を期待しているの?
ディスク容量?パーティション容量?利用容量?空き容量?
デバイスファイルをシークして、いったいぜんたい何をしたいの?
UNIXファイスシステムでセクタ単位にアクセスしたいのなら、
特殊なRAW(生)デバイスをオープンするけど、それはUNIX固有の手段になる
なんだか無邪気な子供が無い物ねだりしているようにしか聞こえないね
あなたは最終的に何をしたいの?
535(1): 531 [sage] 2016/07/13(水) 21:08:36.13 ID:9IGkZ4N6(1) AAS
Windowsでディスクをダイレクトに開くコードを貼ったのに、調べも試しもせずに思い込みだけでWindowsでは
デバイスファイルが使えないと返されても自分はなんて答えればいいのだろう
Windowsのデバイスファイルの取り扱いについてゼロから解説しないと話がかみ合わないとかどうすればいいの
ggrksって書かなきゃダメなの?
seekの引数もリファレンスマニュアルからコピペして数字を変えただけなのにそれを間違っていると言われても
どう直せば良いんだ
540(2): 531 [sage] 2016/07/14(木) 00:32:41.64 ID:VP5bmt0B(1) AAS
Windows上からストレージのLBA:0を読み最後の2ByteをHexで表示する例
画像リンク
←MBRのシグネチャである0x55 0xAAが表示されている
少なくともread、write、seek(n, IO::SEEK_SET)は機能して開いたストレージの任意のセクタを読み書き出来た
>>537537(1): デフォルトの名無しさん [sage] 2016/07/13(水) 22:04:05.33 ID:7QL1TPM6(1) AAS
そのコードをどんなプラットフォームで動かそうとしてるんだ?
プラットフォームに依存せずにとか考えてる?
Windowsでは動かんし、Linuxなら別の理由でそっちも動かんぞ
今のところWindowsとLinuxやFreeBSDあたりで動かしたいです
Linuxだと↑の"\\\\.\\PHYSICALDRIVE0"を"/dev/sdc1"とかにしても動かないのかな?
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.051s