30日OS自作本18日目
細かいコンソールの修正といくつかのコマンド(mem,cls,dir)を作る内容でした。
動画
文字列を比較する
string.hで定義されているstrcmpを使用します。
arr[0] == "t" && arr[0] == "s" && arr[2] == "t"
これが
strcmp(arr,"tst")==0
こんなにシンプルにかけます。
#include<stdio.h> #include<string.h> int main(void){ char arr[3] = "tst"; if(strcmp(arr,"tst")==0){ printf("true"); } return 0; }
文字列の取り扱い、Cは普段使っているもの(Java,JS,VB)と結構違うので苦労します。
コマンド
- mem:今まで画面に出してたmemory freeみたいな情報をコンソールにだすだけ
- cls:コンソールに書かれている内容を削除するだけ。
- dir:linuxでいうlsコマンド
dir
dirコマンドに利用するファイルはhariboteOSの中で作成するのではなく、windowsからコピーしてきます。 ですので、本書の内容ではファイルフォーマットはWindowsのものをそのまま拝借するようになっています。
struct FILEINFO { unsigned char name[8]; //8 unsigned char ext[3]; //3 unsigned char type; //1 char reserve[10]; //10 unsigned short time; //2 unsigned short date; //2 unsigned short clustno; //2 unsigned int size; //4 };
FILEINFO(見やすさのために書いてます) NNNNNNNNNNNNNNNNEEEEEETTRRRRRRRRRRRRRRRRRRRRTTTTDDDDCCCCSSSSSSSS FILE(私の実行結果) 48415249424F544553595300000000000000000000007A16C84C0200706C0000 49504C31302020204E41530000000000000000000000927B924C3900950B0000 4D414B45202020204241540000000000000000000000927B924C3F002E000000
あれ?これファイル内容は入ってなくないか?と思いましたが、19日目の内容を見るとこのclustnoに入っている数字の先にファイル内容が入っているようです。
N文字ごとに改行する置換
下記の正規表現で16進数で書かれたテキストを32バイトごとに改行します
置換前 (.{64}) 置換後 $1\r\n
バイナリエディタからコピペで持ってきた時点ではもちろん一行の長い16進数でしかなかったので 上記で置換しました。
余談
昔、結合したセルが一行になるようなエクセルのシートに研修の感想を書かされたことがあります。 これ右端に行った時の改行を自分でやらないといけないんですよね(それじゃ紙に書いてるのと一緒じゃねーか) 固定幅フォント何文字で改行されるのか調べてsakura editorで同じような置換をしてそのまま貼り付けて提出しま した。
コマンド名の変更
dirコマンドなんてWindowsみたいで嫌いだ、Linuxみたいにlsコマンドの方がいいよーという人もいるかもしれません。そういう人は、もちろんlsコマンドにしてくれていいですよ。どこを直したらいいかなんて、ここまで読んできた皆さんには言わなくてもわかりますよね?
とのことですので他のも全部変えて見ました
- mem:free
- cls:clear
- dir:ls
lsコマンド作った、というとなんかすごいことをやったように思えますが、今の所、リードしたデータをWindowのファイルフォーマットに合わせてデータを分解して画面に出してるだけですね〜 そういえばlsコマンドのソースを読む内容の本があったのを思い出しました。
- 作者: 藤原克則
- 出版社/メーカー: 秀和システム
- 発売日: 2017/09/01
- メディア: Kindle版
- この商品を含むブログを見る
いつか読もうと思っています。
感想
コマンドを作っているというより、コンソールを改造しているような感じです。実装もconsole_taskの中にベタ書きになっているので。でも多分今後の章で切り出す気がします。
そういえば普通のコンソール(bash,zsh,cmd)でも実行ファイルとして切り出されておらず、コンソールの機能として実装されているコマンドがあったりするのかしら?
- 作者: 川合秀実
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2006/03/01
- メディア: 単行本
- 購入: 36人 クリック: 735回
- この商品を含むブログ (299件) を見る