Как использовать stat(), чтобы проверить, является ли аргумент командной строки каталогом?
Я пытаюсь посчитать типы файлов, введенных в программу. Поэтому, если вы введете echo.c в качестве источника C, echo.h будет Header и так далее. Но если вы введете каталог, как echo/root
это должно считаться directory
типа, но сейчас его считается как exe
тип. Я получил все остальное работает, я просто пытаюсь понять, как использовать stat()
проверить, если argv
это каталог.
Вот что у меня так далеко
#include <sys/stat.h>
int main(int argc, char* argv[]){
int cCount = 0;
int cHeadCount = 0;
int dirCount = 0;
for(int i = 1; i < argc; i++){
FILE *fi = fopen(argv[i], "r");
if(!fi){
fprintf(stderr,"File not found: %s", argv[i]);
}
else{
struct stat directory;
//if .c extension > cCount++
//else if .h extension > cHeadCount++
else if( stat( argv[i], &directory ) == 0 ){
if( directory.st_mode & S_IFDIR ){
dirCount++;
}
}
}
//print values, exit
}
}
1 ответ
Обратите особое внимание на документацию: stat (2)
Я также не уверен, почему вы открываете файл. Вам не нужно этого делать.
#include <stdio.h>
// Please include ALL the files indicated in the manual
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main( int argc, char** argv )
{
int dirCount = 0;
for (int i = 1; i < argc; i++)
{
struct stat st;
if (stat( argv[i], &st ) != 0)
// If something went wrong, you probably don't care,
// since you are just looking for directories.
// (This assumption may not be true.
// Please read through the errors that can be produced on the man page.)
continue;
if (S_ISDIR( st.st_mode ))
dirCount += 1;
}
printf( "Number of directories listed as argument = %d.\n", dirCount );
return 0;
}