Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
$B%7%9%F%`%W%m%0%i%`!JBh(B4$B=5!K(B
[go: Go Back, main page]

$B%7%9%F%`%W%m%0%i%`!JBh(B4$B=5!K(B

$BEE;R!&>pJs9)3X7O(B
$BDI@n(B $B=$0l(B
<shui @ cs.tsukuba.ac.jp>

$B$3$N%Z!<%8$O!$ http://www.coins.tsukuba.ac.jp/~syspro/2005/No4.html
$B%7%9%F%`%W%m%0%i%`$N%[!<%`%Z!<%8!J(B2005$BG/EY!K(B
http://www.coins.tsukuba.ac.jp/~syspro/2005/
$B$+$i$b%j%s%/$,D%$C$F$"$j$^$9!%(B

$B:#F|$NFbMF(B

$B;~9o$N07$$(B

$B;~9o$NI=8=(B

UNIX$B$K$*$1$k;~9oI=8=$N4pK\$O!$6(Dj@$3&;~(B (UTC) 1970$BG/(B1$B7n(B1$BF|(B 00:00:00 $B$+$i$NIC?t$GI=$9%+%l%s%@!<;~9o$G$"$k!%(B $B%+%l%s%@!<;~9o$rI=$9$?$a$K;H$o$l$k7?$O(B time_t $B$G$"$k!%(B $B%7%9%F%`%3!<%k$d%i%$%V%i%j4X?t$N0z?t$dLa$jCM$K(B time_t $B$,=P$F$-$?$i!$$3$N%+%l%s%@!<;~9o0UL#$9$k$b$N$H;W$C$FNI$$!%(B

time_t $B$N

% egrep time_t /usr/include/time.h | egrep typedef [$B
typedef __time_t time_t;
% egrep __time_t /usr/include/bits/types.h [$B
typedef long int __time_t;
%

time_t $B$NB>$K$b!$(Bstruct tm, struct timeval, struct timespec, clock_t $B$J$I!$;~4V$d;~9o$rI=$99=B$BN$d7?$,I,MW$K1~$8$F$$$m$$$mDj5A$5$l$F$*$j!$;~4V$d;~9o$N

$B;~9o$N

$B;~9o$O%+!<%M%k$,4IM}$7$F$*$j!$8=:_;~9o$r=jF@$9$k%7%9%F%`%3!<%k$H$7$F(B time $B$d(B gettimeofday $B$,$"$k!%(B

time_t time(time_t *t);
int    gettimeofday(struct timeval *tv, struct timezone *tz);

gettimeofday $B$O!$IC?t$@$1$G$J$/%^%$%/%mIC$^$GI=$9$3$H$,$G$-$k$h$&$K$7$?(B struct timeval $B$K8=:_;~9o$rJV$7$F$/$l$k!J$=$l$@$1$N@:EY$,$"$k$N$O4u$G$"$k!K!%(B struct timeval $B$O0J2<$N$h$&$KDj5A$5$l$F$$$k!%(B

struct timeval {
        long tv_sec;   /* seconds */
        long tv_usec;  /* microseconds */
};

time $B%7%9%F%`%3!<%k$NJV$9CM$H!$(Bgettimeofday $B$K$h$j(B struct timeval $B$N(B tv_sec $B%a%s%P$K%;%C%H$5$l$kCM$OF1$8$G$"$k!%(B $B0J2<$O$=$l$r3N$+$a$k%W%m%0%i%`$G$"$k!%(B

     1  #include <stdio.h>
     2  #include <time.h>
     3  #include <unistd.h>
     4  #include <sys/time.h>
     5  
     6  main()
     7  {
     8          time_t  t;
     9          struct timeval  tv;
    10  
    11          time(&t);
    12          gettimeofday(&tv, NULL);
    13  
    14          printf("        time: %d\n", t);
    15          printf("gettimeofday: %d\n", tv.tv_sec);
    16  }

$B%3%s%Q%$%k!$

% ./a.out [$B
        time: 1114868334
gettimeofday: 1114868334
%

$B;~9o$r07$&%i%$%V%i%j4X?t(B

1970$BG/$+$i$NIC?t$O%3%s%T%e!<%?$K$OJXMx$G$b?M4V$,07$&$K$OITJX$G$"$k$?$a!$?M4V$KJ,$+$j$d$9$$7A<0$KJQ49$7$F$/$l$k%i%$%V%i%j4X?t$,MQ0U$5$l$F$$$k!%(B

char *asctime(const struct tm *timeptr);
char *ctime(const time_t *timep);
struct tm *gmtime(const time_t *timep);
struct tm *localtime(const time_t *timep);
time_t mktime(struct tm *timeptr);

ctime, gmtime, localtime $B$O(B time_t $B!J$D$^$j(B1970$BG/$+$i$NIC?t!K$r0z?t$K$lJ8;zNs!$(Btime_t $B$KJQ49$9$k!%(B mktime $B0J30$O!$JQ49$5$l$?J8;zNs$d(B struct tm $B$X$N%]%$%s%?$rJV$9!%(B $B$3$l$i$N%]%$%s%?$N@h$N%G!<%?NN0h$O(B1$B$D$7$+$J$$$?$a!$e=q$-$5$l$F$7$^$&$3$H$KCm0U!%(B asctime $B$H(B ctime$B!$(Bgmtime $B$H(B localtime $B$O=PNO@h$N%G!<%?NN0h$r6&M-$7$F$$$k$3$H$b$"$k!%(B

struct tm $B$O0J2<$N$h$&$KDj5A$5$l$F$$$k!%(B

struct tm {
        int     tm_sec;                 /* $BIC(B */
        int     tm_min;                 /* $BJ,(B */
        int     tm_hour;                /* $B;~4V(B */
        int     tm_mday;                /* $BF|(B */
        int     tm_mon;                 /* $B7n(B */
        int     tm_year;                /* $BG/(B */
        int     tm_wday;                /* $BMKF|(B */
        int     tm_yday;                /* $BG/FbDL;;F|(B */
        int     tm_isdst;               /* $B2F;~4V(B */
};

$B0J2<$N%W%m%0%i%`$O(B time $B$K$h$j8=:_$N%+%l%s%@!<;~9o$r

  • 11$B9TL\!'(Bctime $B$GJ8;zNs$KJQ49$7$F=PNO(B
  • 13$B!A(B16$B9TL\!'(Blocaltime $B$G(B struct tm $B7A<0$KJQ49$7$F!$$=$l$>$l$N%a%s%P$r=PNO(B
  • 18$B!A(B21$B9TL\!'(Bgmtime $B$G(B struct tm $B7A<0$KJQ49$7$F!$$=$l$>$l$N%a%s%P$r=PNO(B $B$7$F$$$k!%(B ctime $B$OKvHx$K2~9T$,IU$$$?J8;zNs$rJV$9$3$H$KCm0U!%(B 16$B9TL\$N(B tzname $B$O%?%$%`%>!<%s$rI=$9J8;zNs$,F~$C$F$$$kBg0hJQ?t$G$"$j!$(Blocaltime $B$r8F$S=P$9$3$H$G$=$NCM$,%;%C%H$5$l$k!%(B

         1  #include <stdio.h>
         2  #include <time.h>
         3  
         4  main()
         5  {
         6          time_t  t;
         7          char    *ts;
         8          struct tm       *tmp;
         9  
        10          time(&t);
        11          printf("%s", ctime(&t));
        12  
        13          tmp = localtime(&t);
        14          printf("%d/%02d/%02d %02d:%02d:%02d (%s)\n",
        15              1900 + tmp->tm_year, tmp->tm_mon, tmp->tm_mday,
        16              tmp->tm_hour, tmp->tm_min, tmp->tm_sec, tzname[0]);
        17  
        18          tmp = gmtime(&t);
        19          printf("%d/%02d/%02d %02d:%02d:%02d (UTC)\n",
        20              1900 + tmp->tm_year, tmp->tm_mon, tmp->tm_mday,
        21              tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
        22  }
    

    $B%3%s%Q%$%k

    % ./a.out [$B
    Sun May  1 09:53:41 2005
    2005/04/01 09:53:41 (JST)
    2005/04/01 00:53:41 (UTC)
    %
    

    $B$=$NB>$N;~4V4X78$N%7%9%F%`%3!<%k!$%i%$%V%i%j4X?t(B

    sleep, nanosleep $B$O!$;XDj$5$l$?;~4V$@$1%W%m%;%9$No$=$l$@$1$N@:EY$,$"$k$o$1$G$O$J$$!%(B

    unsigned int sleep(unsigned int seconds);
    int nanosleep(const struct timespec *req, struct timespec *rem);
    

    clock, times $B$O%W%m%;%9$N

    clock_t clock(void);
    clock_t times(struct tms *buf);
    

    $B$h$j9bEY$JF~=PNO(B

    $B9=B$BN$NF~=PNO(B

    $B$^$H$a$F07$&$HJXMx$J%G!<%?$O!$(BC$B%W%m%0%i%`$G$O9=B$BN$rMQ$$$FI=8=$9$k!%(B $BNc$($P=;=jO?$r:n$k>l9g!$L>A0!$=;=j!$EEOCHV9f!$%a%$%k%"%I%l%9$J$I$r9=B$BN$H$7$F$^$H$a$F07$&$H!$%=!<%H$d8!:w$J$IMM!9$J=hM}$,$7$d$9$/$J$k!%(B

    sizeof

    $B$=$N$h$&$J9=B$BN$N%G!<%?$r%U%!%$%k$KJ]B8!$$^$?$OFI$_=P$9$?$a$K!$$^$:CN$i$J$/$F$O$J$i$J$$$3$H$O!$9=B$BN$NBg$-$5$G$"$k!%(B $B=;=jO?$N$=$l$>$l$N%(%s%H%j$N$?$a$K!$0J2<$N$h$&$J9=B$BN$rDj5A$7$?$H$9$k!%(B

         1  struct entry {
         2          char    name_family[32];
         3          char    name_first[32];
         4          char    addr[128];
         5          int     zip1;
         6          int     zip2;
         7          char    mail[128];
         8  };
    

    $B$3$N9=B$BN$NBg$-$5$rCN$k$?$a$K$O(B sizeof $B1i;;;R$rMQ$$$k!%(B struct entry $B$NDj5A$O(B addr.h $B$K=q$+$l$F$$$k$H$9$k$H!$0J2<$N%W%m%0%i%`$O$=$N%P%$%H?t$rI=<($9$k!%(B

         1  #include <stdio.h>
         2  #include "addr.h"
         3
         4  main()
         5  {
         6          printf("sizeof(struct addr) = %d\n", sizeof(struct entry));
         7  }
    

    $B%3%s%Q%$%k

    % ./a.out [$B
    sizeof(struct addr) = 328
    %
    

    struct entry $B$O!$L>A0$K(B32$B%P%$%HG[Ns$,(B2$B$D!$=;=j$H%a%$%k$K(B128$B%P%$%H$NG[Ns$,(B2$B$D!$M9JXHV9f$K(B4$B%P%$%H$N(B int $B$,(B2$B$D;HMQ$7$F$$$k$?$a!$9g7W(B328$B$H$J$j!$>e5-$N

    $BF~=PNO(B

    $B%U%!%$%k$X$NF~=PNO$K$O2?$bFCJL$J$3$H$O$J$/!$%7%9%F%`%3!<%k$N(B read, write $BKt$O%i%$%V%i%j4X?t$N(B fread, fwrite $B$r;HMQ$9$k!%(B

    n$B8D$N%(%s%H%jMQ$N%a%b%jNN0h$r3NJ]$7$F!$$=$3$KFI$_9~$`$H$$$&$h$&$J>l9g!$(Bread $B%7%9%F%`%3!<%k$@$H0J2<$N$h$&$K$J$k!J4JC1$N$?$a%(%i!<=hM}$O>JN,$7$F$"$k!K!%(B malloc $B$G(B stuct entry $B9=B$BN(B n $B8DJ,$NNN0h$r3NJ]$9$k$?$a!$NN0h$N%5%$%:$H$7$F(B sizeof(struct entry) $B$K(B n $B$r>h$8$?CM$r0z?t$K;XDj$7$F$$$k!%(B malloc $B$G3NJ]$7$?NN0h!J(Bdata $B$,;X$7<($7$F$$$kNN0h!K$K%G!<%?$rFI$_9~$`$?$a!$(Bread $B$X$N0z?t$H$7$F$bF1$8%5%$%:(B (sizeof(struct entry) * n) $B$r;XDj$7$F$$$k!%(B

    int	fd;
    int	n;
    struct entry	*data;
    
    ...
    
    data = malloc(sizeof(struct entry) * n);
    read(fd, data, sizeof(struct entry) * n);
    

    $B0J2<$O(B fread $B$GFI$_9~$`$h$&$K$7$?>l9g$G$"$k!J4JC1$N$?$a%(%i!<=hM}$O>JN,$7$F$"$k!K!%(B fread $B$N>l9g!$FI$_9~$_$?$$MWAG$N%5%$%:$H$=$N?t$rJL!9$K;XDj$9$k$h$&$K$J$C$F$$$k$?$a!$(Bsizeof(struct entry) $B$H(B n $B$,JL!9$N0z?t$K$J$k!%(B

    FILE	*fp;
    int	n;
    struct entry	*data;
    
    ...
    
    data = malloc(sizeof(struct entry) * n);
    fread(data,  sizeof(struct entry), n, fp);
    

    fread, fwrite $B$O!$9=B$BN%G!<%?$NF~=PNO$,0U<1$5$l$?(BAPI$B@_7W$,$5$l$F$*$j!$F~=PNO$7$?$$%G!<%?$N%5%$%:$H$=$N?t$r;XDj$9$k$h$&$K$J$C$F$$$k!%(B

    $B%W%m%0%i%`Nc!J(Butmp$B%G!<%?$NFI$_9~$_!K(B

    /var/run/utmp $B$H$$$&%U%!%$%k$K$O8=:_%m%0%$%s$7$F$$$k%f!<%6$,5-O?$5$l$F$$$k!%(B $B0J2<$N(B$B%W%m%0%i%`(B$B$O(B fread $B$rMxMQ$7(B1$B%(%s%H%j$4$H%G!<%?$rFI$_9~$_!$%m%0%$%s%f!<%6$rI=<($9$k%W%m%0%i%`$G$"$k!%(B struct utmp $B$NDj5A$O(B /usr/include/utmp.h $B!JpJs$r=PNO$7$F$$$k!%(B UTMP_FILE $B$K$O%m%0%$%s%f!<%6$@$1$G$J$/4IM}>pJs$b4^$^$l$k!%(B $B%m%0%$%s%f!<%6>pJs$@$1$r=PNO$9$k$?$a$K$O(B ut_type $B%a%s%P$NCM$,(B USER_PROCESS $B$N;~$@$1=PNO$9$k!%(B

         1  #include <stdio.h>
         2  #include <utmp.h>
         3  #include <time.h>
         4
         5  main()
         6  {
         7          FILE    *fp ;
         8          struct utmp     u;
         9
        10          fp = fopen(UTMP_FILE, "r");
        11
        12          if(fp == NULL) {
        13              perror(UTMP_FILE);
        14              exit(-1);
        15          }
        16
        17          while(fread(&u, sizeof(u), 1, fp) == 1) {
        18                  if (u.ut_type == USER_PROCESS)
        19                          printf("%-8s %-8s (%s) %s", u.ut_user,
        20                              u.ut_line, u.ut_host, ctime(&u.ut_time));
        21          }
        22
        23          fclose(fp);
        24  }
    

    $B>e5-%W%m%0%i%`$r%3%s%Q%$%kpJs$,I=<($5$l$F$$$k!%(B

    % ./a.out [$B
    shui     pts/1    (real.cs.tsukuba.ac.jp) Fri Apr 29 17:24:06 2005
    shui     pts/0    (real.cs.tsukuba.ac.jp) Fri Apr 29 17:17:30 2005
    % who -l [$B
    shui     pts/1    Apr 29 17:24 (real.cs.tsukuba.ac.jp)
    shui     pts/0    Apr 29 17:17 (real.cs.tsukuba.ac.jp)
    %
    

    $B%G!<%?%U%!%$%k$N%]!<%?%S%j%F%#(B

    $B9=B$BN$N%G!<%?$r=q$-9~$_:n@.$7$?%G!<%?$rMM!9$J%3%s%T%e!<%?$G6&M-$7$h$&$H$9$k;~$KCm0U$7$J$1$l$P$$$1$J$$$N$O!$%G!<%?$,$I$N$h$&$K%U%!%$%k$K=q$+$l$F$$$k$N$+$H$$$&E@$G$"$k!%(B $BB($A!$?tCM%G!<%?$,$I$N$h$&$K%a%b%j>e$GI=8=$5$l$F$$$k$N$+$K$D$$$FCN$kI,MW$,$"$k!%(B $BNc$($P!$0J2<$N$h$&$JE@$K$D$$$F5$$r$D$1$kI,MW$,$"$k!%(B

    • $B%P%$%H?t!'(B 32$B%S%C%H%W%m%;%C%5$G$O(B int $B$O(B4$B%P%$%H$G$"$k$,!$(B16$B%S%C%H%W%m%;%C%5$G$O(B 2 $B%P%$%H$N$3$H$bB?$$!%(B
    • $B%P%$%H%*!<%@!'(B int $B$N?tCM$,(B4$B%P%$%H$GI=$5$l$k$H$7$F!$(B100$BHVCO$K=q$-9~$`$H!$3F%P%$%H$O(B100$B!A(B103$B$NHVCO$K=q$-9~$^$l$k(B $B?tCM$NCf$N0lHV>.$5$$J}$r(B100$BHVCO!$0lHVBg$-$$J}$r(B103$BHVCO$K=q$-9~$`%W%m%;%C%5!J%j%H%k%(%s%G%#%"%s!K$H!$(B $B5U$K0lHVBg$-$$J}$r(B100$BHVCO!$0lHV>.$5$$J}$r(B103$BHVCO$K=q$-9~$`%W%m%;%C%5!J%S%C%0%(%s%G%#%"%s!K$,$"$k!%(B
    • $B%"%i%$%s%a%s%H!'(B $B%W%m%;%C%5$K$H$C$FD>@\$N7W;;BP>]$G$"$k?tCM$r%a%b%j>e$K3JG<$9$k;~!$$=$N%W%m%;%C%5$K$H$C$F:G$bET9g$,NI$$$h$&$KG[CV$7$F$7$^$&!%(B $B:G6a$NB?$/$N%W%m%;%C%5$G$O(B int $B$d(B double $B$H$$$C$?(B4$B%P%$%H$N%G!<%?$O(B4$B%P%$%H6-3&!J(B4$B$G3d$j@Z$l$kHVCO!K$K9g$o$;$FG[CV$9$k!%(B $B$3$N$h$&$JG[CV$N$3$H$r%"%i%$%s%a%s%H$H8F$V!%(B

    $B$"$k0UL#!$:G$b%]!<%?%S%j%F%#$,9b$$$N$O(B1$B%P%$%H$4$H$K%"%/%;%9$G$-$k%F%-%9%H%U%!%$%k$G$"$k!%(B $BNc$($P!$MM!9$J%G!<%?$r07$($k$h$&$K@_7W$5$l$?(BXML$B$O%F%-%9%H7A<0$G$"$k!%(B

    $B%U%!%$%k$N%i%s%@%`%"%/%;%9(B

    $BA4$F$r%a%b%j>e$KFI$_9~$`$3$H$,Fq$7$$Bg$-$J%G!<%?$r07$&>l9g!$A4%G!<%?$O%U%!%$%k$K3JG<$7!$I,MW$J%G!<%?$N$_$rFI$_=q$-$9$k$3$H$K$J$k!%(B $B$=$N>l9g!$%G!<%?$r%U%!%$%k$N@hF,$+$i=gHV$KFI$_9~$s$G$$$/%7!<%1%s%7%c%k%"%/%;%9$G$O$J$/!$ESCf$rFI$_Ht$P$9!JFI$_=q$-$9$k>l=j$r0\F0$9$k!K%i%s%@%`%"%/%;%9$,$G$-$k$H8zN($,NI$$!%(B

    $B%i%s%@%`%"%/%;%9$r$9$k$?$a$K$O!$%7%9%F%`%3!<%k$N(B read, write $B$rMQ$$$F$$$k>l9g$K$O(B lseek$B!$%i%$%V%i%j4X?t$N(B fread, fwrite $B$rMQ$$$F$$$k>l9g$K$O(B fseek $B$rMQ$$$k!%(B $B$3$l$i$O!$%U%!%$%k$rFI$_=q$-$9$k0LCV!J@hF,$+$i$N%P%$%H?t!K$r0\F0$9$k!%(B $B$3$N0LCV$N$3$H$r!$%*%U%;%C%H!$%7!<%/%]%$%s%?!$%U%!%$%k%]%$%s%?$J$I$H8F$V!J%U%!%$%k%]%$%s%?$H8F$V>l9g$O(B FILE* $B$HJ6$i$o$7$$$N$GCm0U!K!%(B

    off_t lseek(int fildes, off_t offset, int whence);
    int   fseek(FILE *stream, long offset, int whence);
    

    lseek, fseek $B6&$K;XDj$9$k%Q%i%a!<%?$OF1$8$G!$Bh(B3$B0z?t$N(B whence $B$G;XDj$5$l$k0LCV$KBh(B2$B0z?t$N(B offset $B%P%$%H?t$r2C$($k$3$H$K$h$C$FF@$i$l$?0LCV$K0\F0$9$k!%(B $B$D$^$j!$(Boffset $B$KIi$NCM$r;XDj$9$k$H!$(Bwhence $B$G;XDj$5$l$?0LCV$+$iA0$K0\F0$9$k!%(B whence $B$K$O0J2<$N%^%/%m$N$I$l$+$r;XDj$9$k!%(B

    SEEK_SET $B%U%!%$%k$N@hF,$+$i(B offset $B%P%$%HL\$K0\F0!%(B
    SEEK_CUR $B8=:_$N0LCV$+$i(B offset $B%P%$%HL\$K0\F0!%(B
    SEEK_END $B%U%!%$%k$NKvHx$+$i(B offset $B%P%$%HL\$K0\F0!%(B

    SEEK_END $B$K$h$j%U%!%$%kKvHx$+$i@hF,J}8~$K8~$+$C$F(B offset $B%P%$%HL\$K0\F0$7$?$$>l9g!JDL>o$=$&$G$"$k$H;W$o$l$k$,!K$O!$(Boffset $B$K$OIi$NCM$r;XDj$7$J$1$l$P$$$1$J$$$3$H$KCm0U!%(B

    $B%W%m%0%i%`Nc!J(Bwtmp$B%G!<%?$NFI$_9~$_!K(B

    /var/log/wtmp $B$H$$$&%U%!%$%k$K$O$3$l$^$G!$$=$N%3%s%T%e!<%?$K%m%0%$%s$7$?%f!<%6$N5-O?$,;D$C$F$$$k!%(B $B?7$?$K%f!<%6$,%m%0%$%s$9$k$H!$%U%!%$%kKvHx$K=q$-B-$5$l$k!%(B $B8E$$5-O?$,%U%!%$%k$N@hF,$NJ}$K$"$j!$?7$7$$5-O?$OKvHx$NJ}$K$"$k!%(B $B=>$C$F!$:G6a%m%0%$%s$7$?(B5$B%f!<%6$rI=<($7$?$$!$$H$$$&$h$&$J>l9g$O!$%i%s%@%`%"%/%;%9$r$9$k$H!$8zN($h$/%G!<%?$K%"%/%;%9$9$k$3$H$,$G$-$k!%(B

    $B0J2<$O!$:G6a%m%0%$%s$7$?%f!<%6$r%W%m%0%i%`$N0z?t$G;XDj$5$l$??t$@$1I=<($9$k(B$B%W%m%0%i%`(B$B$G$"$k!%(B

    • 16$B9TL\!'(Batoi $B$K$h$j!$%W%m%0%i%`$N0z?t$rJ8;zNs$+$i@0?t$KJQ49$9$k!%(B
    • 22$B9TL\!'(BWTMP_FILE $B$r%*!<%W%s$9$k!%(BUTMP_FILE $B$HF1$8$h$&$K!$(Bwtmp $B$b(BUNIX$B$N%P!<%8%g%s$K$h$j%Q%9$,0[$J$k$?$a!$%^%/%m$GDj5A$5$l$F$$$k!%(B
    • 28$B9TL\!'%U%!%$%kKvHx(B (SEEK_END) $B$+$i(B num $B%(%s%H%jJ,$@$1A0$K%U%!%$%k%]%$%s%?$r0\F0$9$k!%(B
    • 33$B9TL\!'(Bfread $B$G(B1$B%(%s%H%j$4$H$KFI$_9~$_!$I=<($9$k!%(B
    • 35$B9TL\!'(Bctime $B$G3F%(%s%H%j$N;~9o>pJs$rJ8;zNs$KJQ49$9$k!%(Bctime $B$OKvHx$K2~9T$rIU$1$F$7$^$&$N$G!$9TKv$G;HMQ$7$F$$$k!%(B

         1  #include <stdio.h>
         2  #include <utmp.h>
         3  #include <time.h>
         4  
         5  main(int argc, char *argv[])
         6  {
         7          int     num;
         8          FILE    *fp ;
         9          struct utmp     u;
        10  
        11          if (argc != 2) {
        12                  printf("Usage: %s num\n", argv[0]);
        13                  exit(1);
        14          }
        15  
        16          num = atoi(argv[1]);
        17          if (num <= 0) {
        18                  printf("The argument needs to be a positive number.\n");
        19                  exit(1);
        20          }
        21  
        22          fp = fopen(WTMP_FILE, "r");
        23          if (fp == NULL) {
        24                  perror(WTMP_FILE);
        25                  exit(-1);
        26          }
        27  
        28          if (fseek(fp, -(sizeof(u) * num), SEEK_END) != 0) {
        29                  perror("fseek");
        30                  exit(1);
        31          }
        32  
        33          while (fread(&u, sizeof(u), 1, fp) == 1) {
        34                  printf("%8s|%36s|%6s|%s", u.ut_user, u.ut_host,
        35                      u.ut_line, ctime(&u.ut_time));
        36          }
        37  
        38          fclose(fp);
        39  }
    

    $B>e5-%W%m%0%i%`$r%3%s%Q%$%k

    % ./a.out 5 [$B
        shui|               real.cs.tsukuba.ac.jp| pts/2|Fri May  6 15:20:28 2005
            |                                    | pts/2|Fri May  6 15:20:44 2005
        shui|               real.cs.tsukuba.ac.jp| pts/2|Fri May  6 15:22:36 2005
            |                                    | pts/2|Fri May  6 15:27:14 2005
        shui|               real.cs.tsukuba.ac.jp| pts/2|Fri May  6 15:27:18 2005
    % last -3 shui [$B
    shui     pts/2        real.cs.tsukuba. Fri May  6 15:27   still logged in
    shui     pts/2        real.cs.tsukuba. Fri May  6 15:22 - 15:27  (00:04)
    shui     pts/2        real.cs.tsukuba. Fri May  6 15:20 - 15:20  (00:00)
    
    wtmp begins Sun May  1 10:53:45 2005
    %
    

    last $B%3%^%s%I$N=PNO$HHf3S$7$F$_$k$H!$(BWTMP_FILE $B$K$I$N$h$&$K%m%0%$%s!$%m%0%"%&%H$N>pJs$,=q$-9~$^$l$k$+$o$+$k!%(B $B%m%0%$%s>pJs$O(B user $BL>!$%[%9%HL>!$%m%0%$%s(B tty $B$H6&$K!$;~9o$,=q$-9~$^$l$F$$$k!%(B $B%m%0%"%&%H$N>l9g$O!$%m%0%$%s(B tty $B$H;~9o$7$+=q$-9~$^$l$F$$$J$$!%(B UTMP_FILE$B$N>pJs$rI=<($9$k(B$B%W%m%0%i%`(B$B$K=P$F$-$?(B struct utmp $B$N(B ut_type $B%a%s%P$NCM$rD4$Y$F$_$k$H!$%m%0%$%s>pJs$O(B ut_type $B$NCM$,(B 7 (USER_PROCESS)$B!$%m%0%"%&%H>pJs$O(B 8 (DEAD_PROCESS) $B$H$J$C$F$$$k$3$H$,$o$+$k!J>e5-$N%W%m%0%i%`$G$OI=<($5$;$F$$$J$$!K!%(B $B%m%0%$%s!$%m%0%"%&%H$NN>J}$N>pJs$r;H$&$3$H$G!$(Blast $B$N$h$&$K2?;~$+$i2?;~$^$G%m%0%$%s$7$F$$$?$+$rI=<($5$;$k$3$H$,$G$-$k!%(B

    $B%U%!%$%k$N%a%b%j%^%C%T%s%0(B

    $B%U%!%$%k$NFbMF$K%"%/%;%9$9$kJ}K!$G!$$3$l$^$G8+$F$-$?(B read, write $B$rMQ$$$kJ}K!$H$OA4$/0c$C$?J}K!$H$7$F!$%U%!%$%k$r%"%I%l%96u4V$K%^%C%W$9$k%a%b%j%^%C%T%s%0Kt$O%a%b%j%^%C%W%I%U%!%$%k(B (memory mapped file) $B$H8F$P$l$kJ}K!$,$"$k!%(B $B%U%!%$%k$r%"%I%l%96u4V$K%^%C%W$9$k$3$H$G!$%U%!%$%k$NFbMF$OG[Ns$N$h$&$K07$&$3$H$,$G$-!$G[Ns$NE:;z$d%]%$%s%?$rMQ$$$F%"%/%;%9$G$-$k$h$&$K$J$k!%(B

    $B%a%b%j%^%C%T%s%0$r9T$&$?$a$K$O!$(Bmmap $B%7%9%F%`%3!<%k$r;HMQ$9$k!%(B

    void  *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
    

    mmap $B$O%U%!%$%k%G%#%9%/%j%W%?(B (fd) $B$G;XDj$5$l$?%U%!%$%k$r%"%I%l%96u4V$K%^%C%W$9$k!%(B $B0z?t$H$7$F!$%U%!%$%k$N$I$N0LCV(B (offset) $B$+$i$I$l$@$1$ND9$5(B (length) $B$r%^%C%W$9$k$+;XDj$9$k!%(B $B$^$?!$%^%C%W$5$l$?NN0h$N%a%b%jJ]8n(B (prot) $B$H%?%$%W(B (flags) $B$b;XDj$9$k!%(B

    WTMP_FILE $B$r%"%/%;%9$9$k(B$B%W%m%0%i%`(B$B$r!$%a%b%j%^%C%T%s%0$rMQ$$$k$h$&$KJQ99$9$k$H0J2<$N$h$&$K$J$k!%(B $BJQ99E@$O0J2<$NDL$j$G$"$k!%(B

    • 26, 51$B9TL\!'(Bmmap $B$G$O%^%C%W$9$k%U%!%$%k$r%U%!%$%k%G%#%9%/%j%W%?$G;XDj$9$k$?$a!$(Bfopen, fclose $B$G$O$J$/(B open, close $B$r;HMQ!%(B
    • 32$B9TL\!'%^%C%W$9$k%U%!%$%k$NBg$-$5$r(B fstat $B$G 37$B9TL\!'(Bmmap$B$G%U%!%$%k$r%^%C%W!%(B
    • 43$B!A(B49$B9TL\!'%]%$%s%?$rMQ$$$F%G!<%?$K%"%/%;%9!%(B

         1  #include <stdio.h>
         2  #include <utmp.h>
         3  #include <time.h>
         4  #include <fcntl.h>
         5  #include <sys/types.h>
         6  #include <sys/stat.h>
         7  #include <sys/mman.h>
         8  
         9  main(int argc, char *argv[])
        10  {
        11          int     fd, num;
        12          struct stat     fs;
        13          struct utmp     *u;
        14  
        15          if (argc != 2) {
        16                  printf("Usage: %s num\n", argv[0]);
        17                  exit(1);
        18          }
        19  
        20          num = atoi(argv[1]);
        21          if (num <= 0) {
        22                  printf("The argument needs to be a positive number.\n");
        23                  exit(1);
        24          }
        25  
        26          fd = open(WTMP_FILE, O_RDONLY);
        27          if (fd < 0) {
        28                  perror(WTMP_FILE);
        29                  exit(-1);
        30          }
        31  
        32          if (fstat(fd, &fs) < 0) {
        33                  perror("fstat");
        34                  exit(-1);
        35          }
        36  
        37          u = mmap(NULL, fs.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
        38          if (u == MAP_FAILED) {
        39                  perror("mmap");
        40                  exit(-1);
        41          }
        42  
        43          u += (fs.st_size / sizeof(struct utmp) - num);
        44  
        45          while (num--) {
        46                  printf("%8s|%36s|%6s|%s", u->ut_user, u->ut_host,
        47                      u->ut_line, ctime(&u->ut_time));
        48                  u++;
        49          }
        50  
        51          close(fd);
        52  }
    

    $B>e5-%W%m%0%i%`$r%3%s%Q%$%kpJs$HF1$8>pJs$,I=<($5$l$F$$$k!%(B

    % ./a.out 5 [$B
        shui|               real.cs.tsukuba.ac.jp| pts/2|Fri May  6 15:20:28 2005
            |                                    | pts/2|Fri May  6 15:20:44 2005
        shui|               real.cs.tsukuba.ac.jp| pts/2|Fri May  6 15:22:36 2005
            |                                    | pts/2|Fri May  6 15:27:14 2005
        shui|               real.cs.tsukuba.ac.jp| pts/2|Fri May  6 15:27:18 2005
    %
    

    $B%G%#%l%/%H%j(B

    $B%G%#%l%/%H%j$NFbMF$rFI$_9~$`$K$O%i%$%V%i%j4X?t$rMQ$$$kJ}$,t#$+$K4JC1$G$"$j!$$^$?0\?"@-$b9b$$!%(B $B$^$:%i%$%V%i%j$rMQ$$$?J}K!$K$D$$$F=R$Y!$$=$N8e$G%7%9%F%`%3!<%k$K$h$kJ}K!$K$D$$$F?($l$k!%(B

    $B%i%$%V%i%j$G$N%G%#%l%/%H%jFbMF$NFI$_9~$_(B

    $B%G%#%l%/%H%j$NFbMF$rFI$`$K$O!$0J2<$N%i%$%V%i%j4X?t$r;HMQ$9$k!%(B

    DIR *opendir(const char *name);
    struct dirent *readdir(DIR *dir);
    int closedir(DIR *dir);
    

    $B$3$l$i$N(BAPI$B$O%U%!%$%k%9%H%j!<%`!J(BFILE*$B!K$rMQ$$$k(B fopen, fread, fclose $B$H$h$/;w$F$$$k!%(B opendir $B$O%G%#%l%/%H%j%9%H%j!<%`!J(BDIR*$B!K$rJV$9!%(B $B$=$N%G%#%l%/%H%j%9%H%j!<%`$r;XDj$7!$(Breaddir $B$O%G%#%l%/%H%j$NFbMF$r=gHV$KFI$s$G$$$/!%(B closedir $B$O%G%#%l%/%H%j%9%H%j!<%`$rJD$8$k!%(B

    readdir $B$O(B struct dirent $B$X$N%]%$%s%?$rJV$9!%(B $B$3$N%]%$%s%?$N@h!$$D$^$j(B struct dirent $B9=B$BN$N%G!<%?NN0h$O%G%#%l%/%H%j%(%s%H%j$4$H$K3NJ]$5$l$k$N$G$O$J$/!$(B1$B$D$7$+$J$$!%(B $B=>$C$F!$$3$NFbMF$Oe=q$-$5$l$F$7$^$&!%(B

    $B0J2<$O!$>e5-(BAPI$B$rMQ$$$F%W%m%0%i%`$N0z?t$K;XDj$5$l$?%G%#%l%/%H%jFbMF$rFI$_I=<($9$k(B$B%W%m%0%i%`(B$B$G$"$k!%(B

         1  #include <stdio.h>
         2  #include <dirent.h>
         3  
         4  main(int argc, char *argv[])
         5  {
         6          struct dirent   *dp;
         7          DIR     *dir;
         8          char    *path;
         9  
        10          if (argc == 1)
        11                  path = ".";
        12          else if (argc == 2)
        13                  path = argv[1];
        14          else {
        15                  printf("Usage: %s dir\n", argv[0]);
        16                  exit(1);
        17          }
        18  
        19          dir = opendir(path);
        20          if(dir == NULL) {
        21                  perror(path);
        22                  exit(1);
        23          }
        24  
        25          while (dp = readdir(dir))
        26                  printf("%s\n",dp->d_name);
        27  
        28          closedir(dir);
        29  }
    

    $B>e5-%W%m%0%i%`$r%3%s%Q%$%k

    % ./a.out / [$B
    .
    ..
    lost+found
    boot
    home
    root
    usr
    var
    tmp
    .... $B0J2<>JN,(B ....
    % ./a.out [$B
    .
    ..
    Makefile
    a.c
    a.out
    a.txt
    .... $B0J2<>JN,(B ....
    %
    

    $B%G%#%l%/%H%j$K=q$+$l$F$$$k=gHV$KFI$_=P$7I=<($9$k$N$G!$(Bls $B$H0[$J$j7k2L$O%=!<%H$5$l$F$$$J$$!J=PNO$H$7$F$O(B ls -1f $B$N7k2L$HF1$8$K$J$k!K!%(B

    $B%7%9%F%`%3!<%k$G$N%G%#%l%/%H%jFbMF$NFI$_9~$_(B

    $B%G%#%l%/%H%j$NFbMF$rFI$`%7%9%F%`%3!<%k$H$7$F(B getdents $B$,$"$k!%(B

    int getdents(unsigned int fd, struct dirent *dirp, unsigned int count);
    

    getdents $B$r;HMQ$9$k$?$a$K$O!$$^$:%G%#%l%/%H%j$r(B open $B$7!$%U%!%$%k%G%#%9%/%j%W%?$r

    getdents $B$O!$e$K3JG<$5$l$F$$$k%G%#%l%/%H%j$NFbMF$K6a$$%G!<%?$rFI$_=P$9!%(B $B%G%#%l%/%H%j%(%s%H%j$K4^$^$l$k%U%!%$%kL>$OC;$$$b$N$b$"$l$PD9$$$b$N$b$"$k$?$a!$%G%#%9%/>e$N%G%#%l%/%H%j%(%s%H%j$O2DJQD9$N%G!<%?$G$"$k!%(B $B=>$C$F!$(Bgetdents $B$,FI$_=P$7$F$-$?J#?t$N%G%#%l%/%H%j%(%s%H%j$r@5$7$/=hM}$9$k$?$a$K$O!$3F%(%s%H%j$ND9$5$rD4$Y$J$,$i!$

    $B0J2<$O%i%$%V%i%j$rMQ$$$F%G%#%l%/%H%j%(%s%H%jI=<($9$k(B$B%W%m%0%i%`(B$B$r(B getdents $B$rMQ$$$k$h$&$KJQ99$7$?$b$N$G$"$k!%(B $BJQ99E@$O0J2<$NDL$j$G$"$k!%(B

    • 10$B9TL\!'(Bgetdents $B$O;HMQ$9$k$N$,Fq$7$/!$0lHL$K$O;HMQ$G$-$J$$$h$&$K$J$C$F$$$k!%$=$l$r;HMQ$9$k$?$a$K%7%9%F%`%3!<%k$r8F$S=P$9%9%?%V$r@8@.$7$F$$$k!J6=L#$N$"$k?M$O(B cc -E $B$G$I$N$h$&$J%3!<%I$,=P$F$$$k$+8+$F$_$k$HNI$$!K!%(B
    • 28, 48$B9TL\!'(Bgetdents $B$O%U%!%$%k%G%#%9%/%j%W%?$rMQ$$$k$N$G!$%G%#%l%/%H%j$N%*!<%W%s!$%/%m!<%:$K$O(B open, close $B$rMQ$$$k!%(B
    • 34$B9TL\!'%G%#%l%/%H%j%(%s%H%j$rFI$_9~$`%P%C%U%!NN0h$N3NJ]!%(BBUFSIZ$B$O(B stdio.h $B$GDj5A$5$l$F$$$kI8=`E*$J%P%C%U%!%5%$%:$rI=$9%^%/%m$G$"$k!%(B
    • 40$B9TL\!'(Bgetdents $B$K$h$j%G%#%l%/%H%jFbMF$NFI$_9~$_!%FI$_9~$s$@%P%$%H?t$rJV$9$N$G!$(Brcount $B$K3JG 41$B!A(B43$B9TL\!'FI$_9~$^$l$?%G%#%l%/%H%j%(%s%H%j$r=gHV$K=hM}!%(Bd_reclen $B$,%G%#%l%/%H%j%(%s%H%j$ND9$5$rI=$9!%(B

         1  #include <stdio.h>
         2  #include <stdlib.h>
         3  #include <errno.h>
         4  #include <fcntl.h>
         5  #include <unistd.h>
         6  #include <linux/types.h>
         7  #include <linux/dirent.h>
         8  #include <linux/unistd.h>
         9  
        10  _syscall3(int, getdents, uint, fd, struct dirent *, dirp, uint, count);
        11  
        12  main(int argc, char *argv[])
        13  {
        14          struct dirent   *dp;
        15          void    *buf;
        16          char    *path;
        17          int     fd, rcount;
        18  
        19          if (argc == 1)
        20                  path = ".";
        21          else if (argc == 2)
        22                  path = argv[1];
        23          else {
        24                  printf("Usage: %s dir\n", argv[0]);
        25                  exit(1);
        26          }
        27  
        28          fd = open(path, O_RDONLY);
        29          if(fd < 0) {
        30                  perror(path);
        31                  exit(1);
        32          }
        33  
        34          buf = malloc(BUFSIZ);
        35          if (buf == NULL) {
        36                  perror("malloc");
        37                  exit(1);
        38          }
        39  
        40          while ((rcount = getdents(fd, buf, BUFSIZ)) > 0) {
        41                  for (dp = buf;
        42                       (char *)dp < (char *)buf + rcount;
        43                       dp = (struct dirent *)((char *)dp + dp->d_reclen))
        44                          printf("%s\n",dp->d_name);
        45          }
        46  
        47          close(fd);
        48  }
    

    42, 43$B9TL\$G$O!$%-%c%9%H$r;H$C$F$$$k$?$a!$>/$7M}2r$9$k$N$,Fq$7$/$J$C$F$$$k$+$b$7$l$J$$!%(B 42$B9TL\$N(B for $BJ8$N=*N;>r7o$O!$FI$_9~$s$@%G!<%?$N:G8e$^$G=hM}$7$?$+$I$&$+$GH=CG$9$k!%(B $B7?$,0[$J$k%]%$%s%?$NHf3S$O$G$-$J$$$?$a!$$^$?(B rcount $B%P%$%H2C;;$9$k$3$H$rL@3N$K$9$k$?$a$K!$(Bdp $B$*$h$S(B buf $B$r(B char * $B$K%-%c%9%H$7$F$$$k!%(B 43$B9TL\$O!$(Bdp $B$r0lEY(B char * $B$K%-%c%9%H$7$F(B d_reclen $B%P%$%H2C;;$7!$:F$S(B struct dirent * $B$K%-%c%9%H$7$F$$$k!%(B $B%]%$%s%?$KBP$9$k@0?tCM$N2C;;$O!$$=$N7?$N%P%$%H?t!_@0?tCM$@$1A}$($F$7$^$&!%(B char * $B$K%-%c%9%H$9$k$3$H$G!$2C;;$9$kCM$N%P%$%H?t$@$1A}$d$9$3$H$,$G$-$k!%(B

    $B$B%W%m%0%i%`(B$B$HF1$8$G$"$k$?$a>JN,!%(B

    $B%P%C%U%!%*!<%P!<%U%m!<(B

    $B%P%C%U%!%*!<%P!<%U%m!<$O%W%m%0%i%`$Nh$Ch$C

    $B%P%C%U%!%*!<%P!<%U%m!<$,$I$&$7$F5/$3$k$N$+M}2r$9$k$?$a$K$O!$%W%m%;%9$,

    $B2o!$:G$b2<0L%"%I%l%9$K5!3#8lL?Na$,F~$C$?%F%-%9%HNN0h$,CV$+$l$k!%(B $B$=$N>e$K%G!<%?NN0h$,CV$+$l$k!%(B $B%G!<%?NN0h$H$OJL$K!$4X?t8F$S=P$7;~$NLa$j%"%I%l%9!J%j%?!<%s%"%I%l%9!K$d4X?t$N%m!<%+%kJQ?t$,3JG<$5$l$k%9%?%C%/NN0h$,$"$k!%(B $B%G!<%?NN0h$O%G!<%?3d$jEv$F$,5/$3$k$?$S$K>e0L%"%I%l%9$K8~$+$C$F?-$S$F$$$/!%(B $B%9%?%C%/NN0h$O5U$K!$4X?t8F$S=P$7$,5/$3$k$?$S$K2<0L%"%I%l%9$K8~$+$C$F?-$S$F$$$/!%(B

    $B%W%m%;%9$N%
    

    $B%9%?%C%/NN0h$r$h$j>\:Y$K?^<($9$k$H2

    $B%P%C%U%!%*!<%P!<%U%m!<(B
    

    $B%9%?%C%/%U%l!<%`Cf$N%m!<%+%kJQ?t$KG[Ns$,4^$^$l$F$$$k$H!$G[Ns$NE:;z$,>.$5$$$[$&$,2<0L%"%I%l%9$K$"$j!$Bg$-$$$[$&$,>e0L%"%I%l%9$K$/$k!%(B $B>e$N?^$G(B buf $B$,%]%$%s%?$H$7$FNc$($P(B gets $B$KEO$5$l$k$H!$(Bbuf[0] $B$+$i>e0L%"%I%l%9$K8~$+$C$F=q$-9~$^$l$F$$$/!%(B 64$BJ8;z0J>e$NJ8;z$,=q$-9~$^$l$k$H!$(Bbuf[63] $B$rD6$($F=q$-9~$^$l!$(Bbuf $B$H$7$F3d$jEv$F$i$l$?NN0h$rD6$($F=q$-9~$^$l$F$7$^$&$3$H$K$J$k!%(B $B$5$i$K=q$-9~$^$l$k$H!$%j%?!<%s%"%I%l%9$b=q$-49$($i$l$F$7$^$&!%(B $B%9%?%C%/NN0h$K$&$^$/%W%m%0%i%`$r=q$-9~$_!$%j%?!<%s%"%I%l%9$r$=$N%W%m%0%i%`$N3+;O%"%I%l%9$K@_Dj$7$F$"$2$k$H!$4X?t$,La$k;~$K=q$-9~$s$@%W%m%0%i%`$,

    $B$3$N$h$&$J967bJ}K!$r%9%?%C%/%9%^%C%7%s%0(B (stack smashing) $B$H8F$V!%(B

    $BN}=,LdBj(B

    $BN}=,LdBj!J#3#3!K(B

    $B0z?t$H$7$F;~9o$r;XDj$7!$$=$N;~4V$K$J$C$?$i(B beep $B2;$rLD$i$7$F=*N;$9$k%W%m%0%i%`$r:n$j$J$5$$!%(B

    % ./a.out [$B
    Usage: ./a.out hh mm
    % ./a.out 13 00 [$B
    Sleep 2 minute until 13:00.
    $B"c#1#3!'#0#0$K$J$C$?$i(B beep $B2;$r$J$i$7$F=*N;"d(B
    %
    

    $BN}=,LdBj!J#3#4!K(B

    $B8=:_$N%m%0%$%s%f!<%6$rI=<($9$k(B$B%W%m%0%i%`(B$B$rJQ99$7!$(Bwho -l $B$HA4$/F1$8$h$&$KI=<($9$k$h$&$K$;$h!%(B

    $BN}=,LdBj!J#3#5!K(B

    $B%m%0%$%s5-O?$rI=<($9$k(B last $B%3%^%s%I$O?7$7$$5-O?$+$iI=<($9$k$,!$(Bwtmp$B$NFbMF$rI=<($9$k(B$B%W%m%0%i%`(B$B$O8E$$5-O?$+$iI=<($9$k!%(B last $B$N$h$&$K?7$7$$5-O?$+$iI=<($9$k$h$&$KJQ99$;$h!J(Blast$B$N$h$&$K2?;~$+$i2?;~$^$G%m%0%$%s$7$F$$$?$+$rI=<($9$k$h$&$K$9$kI,MW$O$J$$!K!%(B

    $BN}=,LdBj!J#3#6!K(B

    wtmp$B$NFbMF$rI=<($9$k(B$B%W%m%0%i%`(B$B$rJQ99$7!$(Blast $B$HA4$/F1$8$h$&$KI=<($9$k$h$&$K$;$h!%(B

    $BN}=,LdBj!J#3#7!K(B

    lseek $B$^$?$O(B fseek $B$rMQ$$$F!$%U%!%$%k$NKvHx$r0z?t$G;XDj$5$l$?9T?t$@$1I=<($9$k(B tail $B%3%^%s%I$K;w$?%W%m%0%i%`$r:n$j$J$5$$!%(B

    $BN}=,LdBj!J#3#8!K(B

    mmap $B$rMQ$$$F(B tail $B%3%^%s%I$K;w$?%W%m%0%i%`$r:n$j$J$5$$!%(B

    $BN}=,LdBj!J#3#9!K(B

    $BDL>o$N(B ls $B$N7k2L$N$h$&$K(B '.' $B$+$i;O$^$kL>A0$OI=<($7$J$$$h$&$K$7$J$5$$!%(B $B$^$?!$%G%#%l%/%H%j$N>l9g$O!J(B ls -F $B$N$h$&$K!KKvHx$K(B '/' $B$rIU$1$F!$%7%s%\%j%C%/%j%s%/$N>l9g$OKvHx$K(B '@' $B$rIU$1$FI=<($9$k$h$&$K$7$J$5$$!%(B

    $B$"$k%G%#%l%/%H%j%(%s%H%j$,%G%#%l%/%H%j$G$"$k$+$I$&$+D4$Y$k$K$O(B stat $B%7%9%F%`%3!<%k$r;HMQ$9$k!%(B

    int stat(const char *file_name, struct stat *buf);
    

    struct stat $B9=B$BN$N(B st_mode $B%a%s%P$K%U%!%$%k$N

    $BN}=,LdBj!J#4#0!K(B

    ls -R $B$N$h$&$K!$%G%#%l%/%H%j$NLZ9=B$$r:F5"E*$KC5:w$7I=<($9$k%W%m%0%i%`$r:n$j$J$5$$!%(B

    '.', '..' $B$d%7%s%\%j%C%/%j%s%/$O!$C5:w$7$J$$$h$&$K$9$k$3$H!%(B

    $BN}=,LdBj!J#4#1!K(B

    $B%P%C%U%!%*!<%P!<%U%m!<$r5/$3$7$d$9$$%W%m%0%i%`$r=q$-!$$=$N%W%m%0%i%`$r