1

Ubuntuusingの下にあるファイルの詳細を表示しようとしていますC

たとえば、 というファイル/フォルダを探している場合、次の12ようになります。

a@ubuntu:~/Desktop$ ./exer4 . 12
drwxrwxr-x 3 1000 1000 4096 2012-06-19 10:08 
drwxrwxr-x 3 1000 1000 4096 2012-06-16 14:09 

しかし、私はそれをそのように表示したい:

a@ubuntu:~/Desktop$ find . -name 12 -exec ls \-lnd {} \; | sort
drwxrwxr-x 3 1000 1000 4096 Jun 16 14:09 
drwxrwxr-x 3 1000 1000 4096 Jun 19 10:08

つまり、私はこれを変更したい:2012-06-19 10:08それJun 19 10:08、またはこれに

2012-06-16 14:09それに Jun 16 14:09

ファイルの詳細を表示するために、次の方法を使用しています。

void displayFileProperties(struct stat* file,char*  outputProperties)
{


    char partOfOutput[BUFFER];
    mode_t mode = file->st_mode;
    struct tm* time;
    int month, day, hour, min;

    // First take care of the file details , e.g permission

    // this is a regular file
    if (S_ISREG(mode)) strcat(outputProperties,"-");

    // the is a pipe file
    else if (S_ISFIFO(mode)) strcat(outputProperties,"p");

    // for a link file
    else if (S_ISLNK(mode)) strcat(outputProperties,"l");

    // for a directory file
    else if (S_ISDIR(mode)) strcat(outputProperties,"d");

    // this is for a socket file
    else if (S_ISSOCK(mode)) strcat(outputProperties,"s");

    // for a block device file
    else if (S_ISBLK(mode)) strcat(outputProperties,"b");

    // and this is one for a character device file
    else if (S_ISCHR(mode)) strcat(outputProperties,"c");


    // Permissions

    (mode & S_IRUSR)? strcat(outputProperties,"r"): strcat(outputProperties,"-");
    (mode & S_IWUSR)? strcat(outputProperties,"w"): strcat(outputProperties,"-");
    (mode & S_IXUSR)? strcat(outputProperties,"x"): strcat(outputProperties,"-");


    // Group permission

    (mode & S_IRGRP) ?strcat(outputProperties,"r"):strcat(outputProperties,"-");
    (mode & S_IWGRP) ?strcat(outputProperties,"w"):strcat(outputProperties,"-");
    (mode & S_IXGRP) ?strcat(outputProperties,"x"):strcat(outputProperties,"-");


    (mode & S_IROTH)? strcat(outputProperties,"r"):strcat(outputProperties,"-");
    (mode & S_IWOTH) ?strcat(outputProperties,"w"):strcat(outputProperties,"-");
    (mode & S_IXOTH) ?strcat(outputProperties,"x"):strcat(outputProperties,"-");



    //print other information

    //print num of hard link
    sprintf(partOfOutput," %d ",file->st_nlink);
    strcat(outputProperties,partOfOutput);

    //print num of hard link
    sprintf(partOfOutput,"%d ",file->st_uid);
    strcat(outputProperties,partOfOutput);

    //print num of hard link
    sprintf(partOfOutput,"%d ",file->st_gid);
    strcat(outputProperties,partOfOutput);

    //print num of hard link
    sprintf(partOfOutput,"%d ",(int) file->st_size);
    strcat(outputProperties,partOfOutput);


    // From here take care of the time properties

    time = localtime(&file->st_mtim);

    month = time->tm_mon + 1;
    day = time->tm_mday;
    hour = time->tm_hour;
    min = time->tm_min;

    sprintf(partOfOutput,"%d-",time->tm_year + 1900);
    strcat(outputProperties,partOfOutput);

    if(month < 10)
        strcat(outputProperties,"0");

    sprintf(partOfOutput,"%d-",month);
    strcat(outputProperties,partOfOutput);

    if(day < 10)
        strcat(outputProperties,"0");

    sprintf(partOfOutput,"%d ",day);
    strcat(outputProperties,partOfOutput);

    if(hour < 10)
        strcat(outputProperties,"0");

    sprintf(partOfOutput,"%d:",hour);
    strcat(outputProperties,partOfOutput);

    if(min < 10)
      strcat(outputProperties,"0");

    sprintf(partOfOutput,"%d ",min);
    strcat(outputProperties,partOfOutput);

}

どうやってやるの ?若干の変更が必要であることはほぼ間違いありませんが、Web を検索しましたが、これを明確にするものは何も見つかりませんでした。

ありがとう

4

2 に答える 2

4

このstrftime()関数は、日付のフォーマットに非常に柔軟です。http://linux.die.net/man/3/strftime

strftime(partOfOutput, BUFFER, "%b %d %H:%M", time);
于 2012-06-26T11:10:12.630 に答える
4

使用できますstrftime

time = localtime(&file->st_mtim);
strftime(partOfOutput, BUFFER, "%b %d %H:%M", time);

のドキュメントをstrftime確認してください。日付と時刻のフォーマットに関するほとんどの問題を解決するために使用できます。

于 2012-06-26T11:13:25.047 に答える