ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

C言語とC++言語コミュのLSコマンド作成について質問させてくださぃ。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
nt myshLS( struct structCommand* pCom, int pipeIn )
{
char *dir;
DIR *dp;
struct dirent *entry;
struct stat statbuf;

if(argc<2){
dir = getenv("PWD");
}else{
dir = argv[1];
}

if(( dp = opendir(dir) ) == NULL ){
perror("opendir");
exit( EXIT_FAILURE );
}

while((entry = readdir(dp)) != NULL){
stat(entry->d_name, &statbuf);
if(S_ISDIR(statbuf.st_mode)){
fprintf(stdout, "%s/\n", entry->d_name);
}else{
fprintf(stdout, "%s\n", entry->d_name);
}
}

closedir(dp);

return(0);
}

現在、コマンドインタープリタのLSコマンドを作成中です。

標準ライブラリ関数を使わず、システムコールを利用し、実装しなければならないのですが、

なかなか進みません。

LSコマンドのいい例などありましたら、是非教えてください。

よろしくお願いします。

コメント(16)

素直に ls のソースを読めば・・・?
さて、UNIX のコマンドに似合わず、いろいろなことをやる ls 君ですが、どこまでが実装範囲なんでしょう?
ファイル名をリストアップすれば OK?
>Farsseさん

コメントありがとうございます。

ファイル名をリストアップするだけで大丈夫です。
【ソース】http://www.linux.or.jp/JF/JFdocs/LFS-BOOK/appendixa/coreutils.html
【書籍】プログラミングテクニック―UNIXコマンドのソースコードにみる実践プログラミング手法
>cafebabeさん

ありがとうございます。

見つからないのですが・・・
lsだったら、
dir = getenv("PWD");
じゃなくて、
dir=".";

そもそも例を見たら勉強にならないのでは?
・statシステムコール
のマニュアルページを見ると。
あとopendir/readdirも使ってはいけない(こいつらはライブラリなので)だとしたら、なかなか厄介ですね。
linuxだと、openシステムコールでディレクトリをオープンできないのでそもそも不可能かも。
solarisなどではディレクトリをopenして、読んでいけばいいですが。

たぶん、lsのソースを読んでも肝心のところはシステムコールじゃなくてreaddirライブラリを呼ぶだけになってるようにおもいます。
>saitohさん

ありがとうございます。
課題がかなりせまっていて、LSがどうしても動かなくて例がほしかったんですよね。。。

すいません・・・

ライブラリはなるべく使わないようにとのことらしいです。
「なるべく」では条件が曖昧。
システムコール以外で何を使っていいの?

ちなみにstatではなくlstat。
ls に -Fとか-lオプションが付いているときの動作をまねるプログラムを作るなら lstat。
そうでなければ stat
でしょ?
>sock/vuelaさん

すいません。

printf以外は使えばいいみたいです。

>saitohさん

細かいといころまで本当にありがとうございます。
>8
何言ってんだ。
statなんか使ったら、切れたリンクでENOENTになる。
なるほど。よく考えたtらオプションの全くついていない時のlsは一切 lstatもstatもしなくていいんだった。

NetBSDでlsのソースを調べてみましたが、opendir/readdir/stat/lstatどれ一つとして使っていませんでした。
fts(3)を使ってました。
自給自足突っ込み
ンなこたぁない。対象ファイルがディレクトリかどうかは調べないといけないので、lstatを実行することは必要。
実在しない名前が渡されたら、stdoutに出さないのが普通じゃない?
そういや、・statシステムコール で、カレントに移動しないとファイルのサイズを取れないって言うの未だに理由がわからない…

ログインすると、残り2件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

C言語とC++言語 更新情報

C言語とC++言語のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング