自分で何度か試したのですが、うまくいきません。ご存知の方ご教授ください。
ディレクトリを指定してその配下にあるファイル全てを実行ファイルか、シンポリックファイルか、普通?のファイルか判断しようとしましたがどうしても実行ファイルの判断処理でコンパイルエラーになります。
(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");
}

の文をぬけばコンパイルもとおり、実行もうまくいくのですが、これが入ってしまうとコンパイル自体「呼び出せるのは関数だけです」という??メッセージのエラーがでてしまいうまくとおりません。
どなたかアドバイスをお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

S_IXUSRは単なる定数なので、当然エラーします。



if( S_IXUSR & buffer.st_mode )

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

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

ファイルの属性で判定してよいか,
S_IXGRP、S_IXOTHは調べなくてよいかとか。

参考URL:http://www.linux.or.jp/JM/html/LDP_man-pages/man …
    • good
    • 0
この回答へのお礼

ありがとうございます。少しわかった気がします。

お礼日時:2002/03/22 10:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報