kfinfo.c
最終更新:2009/12/16
001: /* kfinfo.c 002: * ファイル情報のサンプル 003: * apr_stat の挙動を確認するプログラム 004: */ 005: 006: #define USAGE "Usage: kfinfo <path>" 007: 008: #include "apr_general.h" 009: #include "apr_errno.h" 010: #include "apr_strings.h" 011: #include "apr_file_info.h" 012: 013: #include "mystab.h" 014: 015: int apr_my_main (int ac, char **av, apr_file_t * astdin, apr_file_t * astdout, apr_file_t * astderr, apr_pool_t * pool) { 016: 017: int error_flag = 0; 018: apr_status_t rv = APR_SUCCESS; 019: 020: char *path = NULL; 021: apr_finfo_t finfo; 022: 023: if (ac < 2) { 024: apr_file_printf(astderr, "%s\n", USAGE); 025: error_flag = 1; 026: goto _FINALLY_; 027: } 028: 029: path = av[1]; 030: 031: rv = apr_stat(&finfo, path, APR_FINFO_MIN, pool); 032: if (rv != APR_SUCCESS) { 033: error_flag = 1; 034: goto _FINALLY_; 035: } 036: 037: { 038: char *filetype_str=NULL; 039: switch(finfo.filetype) { 040: case APR_NOFILE: 041: filetype_str="no file type determined"; 042: break; 043: case APR_REG: 044: filetype_str="APR_REG / a regular file"; 045: break; 046: case APR_DIR: 047: filetype_str="APR_DIR / a directory"; 048: break; 049: case APR_CHR: 050: filetype_str="APR_CHR / a character device"; 051: break; 052: case APR_BLK: 053: filetype_str="APR_BLK / a block device"; 054: break; 055: case APR_PIPE: 056: filetype_str="APR_PIPE / a FIFO / pipe"; 057: break; 058: case APR_LNK: 059: filetype_str="APR_LNK / a symbolic link"; 060: break; 061: case APR_SOCK: 062: filetype_str="APR_SOCK / a [unix domain] socket"; 063: break; 064: case APR_UNKFILE: 065: filetype_str="APR_UNKFILE / a file of some other unknown type"; 066: } 067: 068: apr_file_printf(astdout, "filetype=[%s]\n", filetype_str); 069: } 070: 071: apr_file_printf(astdout, "size=[%d]bytes\n", (int)finfo.size); 072: 073: #define XPRINTTIME(XSTR,X) {char tbuf[30]; apr_rfc822_date(tbuf, finfo.X); apr_file_printf(astdout, "%s=[%s]\n", XSTR, tbuf);} 074: 075: XPRINTTIME("atime", atime); 076: XPRINTTIME("mtime", mtime); 077: XPRINTTIME("ctime", ctime); 078: 079: 080: { 081: const char *rootpath=NULL; 082: const char *filepath = apr_pstrdup(pool, path); 083: rv = apr_filepath_root(&rootpath, &filepath, APR_FILEPATH_TRUENAME /*APR_FILEPATH_NATIVE*/, pool); 084: if (rv != APR_SUCCESS) { 085: error_flag = 1; 086: goto _FINALLY_; 087: } 088: apr_file_printf(astdout, "rootpath=[%s], filepath=[%s]\n", rootpath, filepath); 089: } 090: 091: _FINALLY_: 092: 093: if (error_flag) { 094: if (rv != APR_SUCCESS) { 095: char error_buf[256]; 096: apr_file_printf(astderr, "%s\n", apr_strerror(rv, error_buf, sizeof(error_buf))); 097: } 098: apr_file_printf(astderr, "failed!\n"); 099: return 1; /* 異常終了 */ 100: } 101: 102: apr_file_printf(astdout, "\ndone.\n"); 103: return 0; /* 正常終了 */ 104: 105: } /* end of main */
KAKU PROJECT (2009) |