OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

実行ファイルの識別方法?

  • 困ってます
  • 質問No.238330
  • 閲覧数142
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 42% (6/14)

自分で何度か試したのですが、うまくいきません。ご存知の方ご教授ください。
ディレクトリを指定してその配下にあるファイル全てを実行ファイルか、シンポリックファイルか、普通?のファイルか判断しようとしましたがどうしても実行ファイルの判断処理でコンパイルエラーになります。
(lstatの使い方がちゃんとわかってない?)
だいたい以下のような流れです。
-----------------
DIR *dirp;
struct dirent *file;

/*ここで指定ディレクトリのオープン処理(省略)*/

while((file = readdir(dirp)) != NULL)
{
char buff[65536];

struct stat buffer;

sprintf(buff,"%s%s",dir_name,f->d_name);
// 注)dir_nameは指定されたディレクトリ

lstat(buff,&buffer);

printf( "FILE[%s]\n",f->d_name);
if( S_ISLNK( buffer.st_mode) )
{
printf("SLINK!\n");
}
else if( S_IXUSR(buffer.st_mode) )
{
printf("IXUSR\n");
}
else
{
printf("OTHER\n");
}
}

/*ディレクトリのクローズ処理(省略)*/

-----------------------------------
というような形です。

else if( S_IXUSR(buffer.st_mode) )
{
printf("IXUSR\n");
}

の文をぬけばコンパイルもとおり、実行もうまくいくのですが、これが入ってしまうとコンパイル自体「呼び出せるのは関数だけです」という??メッセージのエラーがでてしまいうまくとおりません。
どなたかアドバイスをお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全1件)

  • 回答No.1
レベル13

ベストアンサー率 34% (574/1662)

S_IXUSRは単なる定数なので、当然エラーします。 if( S_IXUSR & buffer.st_mode ) のような使い方をします。 ただ、これで実行ファイルとして判定していいかどうかは 多少疑問が残ります。 ファイルの属性で判定してよいか, S_IXGRP、S_IXOTHは調べなくてよいかとか。 ...続きを読む
S_IXUSRは単なる定数なので、当然エラーします。

if( S_IXUSR & buffer.st_mode )

のような使い方をします。

ただ、これで実行ファイルとして判定していいかどうかは
多少疑問が残ります。

ファイルの属性で判定してよいか,
S_IXGRP、S_IXOTHは調べなくてよいかとか。
お礼コメント
momottie

お礼率 42% (6/14)

ありがとうございます。少しわかった気がします。
投稿日時 - 2002-03-22 10:21:11
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ