6800806 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

ふるた技工所(てっこうしょ)

ふるた技工所(てっこうしょ)

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

キーワードサーチ

▼キーワード検索

プロフィール

Aちゃん22

Aちゃん22

フリーページ

2025.03.25
XML
カテゴリ:ソフト開発日誌
関連ページ
GNU coreutils が rust uutils に置き換えられそうという話題
rust uutils を build する
rust uutils を試す その1

rust uutils を試す続き、引き続き ~/git/uu-coreutils/target/release/coreutils function ... は rust uutils を使った場合を示す。試した環境は lubuntu 24.04 x86_64 だ。一応 Raspberry Pi OS 64bit GNU/Linux bookworm で 2 重チェックしている。

md5sum を試す。GNU coreutils md5sum の方は読めないファイルがあっても止まらない。rust uutils md5sum の方は読めないファイルがあると止まってしまう。使い方によっては不完全な結果になってしまう。rust の書式出力機能は libc の printf よりも優れているのにどのファイルが読めないのか情報を出さないのはなぜ?(というか、完全互換であるべき)。

cd ~/Documents
mkdir -p test-md5sum
cd test-md5sum
seq 3 | while read; do echo ${REPLY} > ${REPLY}; done


md5sum 1 2 3
b026324c6904b2a9cb4b88d6d61c81d1  1
26ab0db90d72e28ad0ba1e22ee510510  2
6d7fce9fee471194aa8b5b6e47267f03  3

md5sum 1 2 x 3
b026324c6904b2a9cb4b88d6d61c81d1  1
26ab0db90d72e28ad0ba1e22ee510510  2
md5sum: x: No such file or directory
6d7fce9fee471194aa8b5b6e47267f03  3

~/git/uu-coreutils/target/release/coreutils \
md5sum 1 2 3

b026324c6904b2a9cb4b88d6d61c81d1  1
26ab0db90d72e28ad0ba1e22ee510510  2
6d7fce9fee471194aa8b5b6e47267f03  3

~/git/uu-coreutils/target/release/coreutils \
md5sum 1 2 x 3

b026324c6904b2a9cb4b88d6d61c81d1  1
26ab0db90d72e28ad0ba1e22ee510510  2
md5sum: failed to open file: No such file or directory

ln を試す。どちらも排他的な挙動になっているのは良さそうだ。エラーメッセージの出力が GNU と rust で一致しない。
cd ~/Documents
mkdir -p test-lns
cd test-lns
touch abcdef
ln -s abcdef ABCDEF-lns


ln -s abcdef ABCDEF-lns; echo $?
ln: failed to create symbolic link 'ABCDEF-lns': File exists
1

~/git/uu-coreutils/target/release/coreutils \
ln -s abcdef ABCDEF-lns; echo $?

ln: Already exists
1

mv を試す。さて、排他制御に使えるだろうか? rust uutils mv は排他制御に使えない仕様だ。危ない。-i オプションを指定しない場合は、mv に失敗しても 0 (成功ステータス) を返す。

cd ~/Documents
mkdir -p test-mv
cd test-mv
touch a b


mv -n a b ; echo $?
mv: not replacing 'b'
1

~/git/uu-coreutils/target/release/coreutils \
mv -n a b ; echo $?

0

ls
a  b

mv -i a b; echo $?
mv: overwrite 'b'? n
1

~/git/uu-coreutils/target/release/coreutils \
mv -i a b ; echo $?

mv: overwrite 'b'? n
1

ls
a  b

dd を試す。rust uutils dd は direct IO (O_DIRECT) が使えないのか。予想はしていた。多分 page align した領域を用意していない?生々しい kernel とのやり取りは嫌っている様子だったし。

cd ~/Document
mkdir -p test-dd
cd test-dd


sudo dd if=/dev/sda of=dev-sda.bin \
bs=512 count=16 iflag=direct

[sudo] password for furuta:
16+0 records in
16+0 records out
8192 bytes (8.2 kB, 8.0 KiB) copied, 0.132819 s, 61.7 kB/s

sudo ~/git/uu-coreutils/target/release/coreutils \
dd if=/dev/sda of=dev-sda.bin \
bs=512 count=16 iflag=direct

dd: IO error: Invalid input

もう少し慎重に GNU coreutils の仕様意図、実装、挙動を研究して rust uutils を実装して欲しいと思う。

パフォーマンスも見ている。色々と言いたいことはある。遅くなったら謙虚に rust では遅くなりますとか、メモリを大量に使いますとか、示していけば信頼されると思う。






お気に入りの記事を「いいね!」で応援しよう

最終更新日  2025.03.25 12:44:50
コメント(0) | コメントを書く
[ソフト開発日誌] カテゴリの最新記事


カレンダー

カテゴリ

サイド自由欄

コメント新着

ニューストピックス


© Rakuten Group, Inc.
X