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(B8$B=5!K(B:
[go: Go Back, main page]

$B%7%9%F%`%W%m%0%i%`!JBh(B8$B=5!K(B: $B%M%C%H%o!<%/!&%W%m%0%i%_%s%0!?(BUDP$B!"%"%/%;%9@)8f(B


$BEE;R!&>pJs9)3X7O(B/$B%7%9%F%`>pJs9)3X8&5f2J(BCS$B@l96(B
$B?7>k(B $BLw(B
<yas@is.tsukuba.ac.jp>

$B$3$N%Z!<%8$O!" http://www.coins.tsukuba.ac.jp/~syspro/2005/No8.html
$B$"$k$$$O!" http://www.coins.tsukuba.ac.jp/~syspro/2005/
http://www.coins.tsukuba.ac.jp/~yas/

$BO"Mm(B

Ruby$B$N:n
  • $BF|;~(B: 7$B7n(B14$BF|(B($BLZ(B)-15$BF|(B($B6b(B), 10:00-
  • $B>l=j(B: 3A301 ($B"+(B3A203$B$+$iJQ99$K$J$j$^$7$?!#(B)
  • $B2JL\L>(B: $B7W;;5!%7%9%F%`FCJL9V5A#I#A(B
  • $B2JL\HV9f(B: L51 2511
  • $BC10L?t(B: 1$BC10L(B
  • $B?=@A4|4V(B: 6$B7n(B9$BF|(B-7$B7n(B6$BF|(B ($B$3$N4|4VFb$K(B Twins $B$GEPO?$7$F$/$@$5$$!#(B)

    $B:#F|$N=EMW$JOC(B

    UDP/IP $B$K$h$k%M%C%H%o!<%/!&%W%m%0%i%_%s%0(B $B%U%!%$%k$KBP$9$k%"%/%;%9@)8f(B

    $BI|=,(B

    UDP/IP$B$N9M$(J}(B

    UDP/IP $B$O!"(BIP $B$HF1$8$/!"(B $B%G!<%?%0%i%`E>Aw%5!<%S%9(B $B$rDs6!$9$k!#%G!<%?%0%i%`$G$O!"%9%H%j!<%`!J(BTCP/IP$B!K$H$O0[$J$j!"DL?.O)$r(B $B3+@_$9$k$3$H$J$/!"%"%I%l%9$r;XDj$7$F%G!<%?$rAw$k!#(BUDP/IP $B$G$O!"%"%I%l(B $B%9$H$7$F$O!"
  • IP $B%"%I%l%9(B(IPv4 $B$G(B 32 $B%S%C%H!"(BIPv6 $B$G(B 128 $B%S%C%H(B)
  • $B%]!<%HHV9f(B(16$B%S%C%H(B)

    IP $BAX$G$O!"%"%I%l%9$H$7$F$O!"(BIP $B%"%I%l%9$@$1$r;H$&!#(BUDP/IP $B$O!"(BIP $BAX$N(B $B5!G=$r$[$H$s$I$=$N$^$^$N7A$GMxMQ2DG=$K$7$?$b$N$G$"$k!#0c$$$O!"%]!<%HHV(B $B9f$r;XDj$G$-$k$3$H$H!"%A%'%C%/%5%`$G%G!<%?$NFbMF$r8!::$G$-$k$3$H$J$I$G(B $B$"$k!#(B

    UDP/IP $B$G$b!"%/%i%$%"%s%HB&$N%"%I%l%9$O!"#O#S$KG$$;!"<+$i$O;X(B $BDj$7$J$$$3$H$,B?$$!J;XDj$9$k$3$H$b$G$-$k!K!#(B

    UDP/IP $B$G$b!"DL?.%Q%?%s$K$h$k(B $B%/%i%$%"%s%H!&%5!<%P!&%b%G%k(B $B$K4p$E$/$3$H$,B?$$!#(B

    $B?^!)!!(BUDP/IP$B$K$h$k%/%i%$%

    $B?^!)!!(BUDP/IP$B$K$h$k%/%i%$%"%s%H!&%5!<%P7?$NDL?.(B

    UDP$B$NFCD'(B

    TCP/IP $B$GDs6!$5$l$F$$$k%9%H%j!<%`$HHf3S$7$F!"(BUDP/IP $B$GDs6!$5$l$F$$$k%G!<(B $B%?%0%i%`$K$O
  • $B7k9g(B(connection)($BDL?.O)(B)$B$,:n$i$l$J$$!#(B
  • $B#1$D$R$H$D$NDL?.$O!"C1J}8~$G$"$k!#!J$?$@$7!"Aj8_$K%Q%1%C%H$rAw $BAw$j=P$7$?%G!<%?$,<:$o$l$F$b!"<+F0E*$K$O:FE>Aw$5$l$J$$!#(B $BI,MW$J$i$P!"%W%m%0%i%`$NCf$G<+J,<+?H$G:FE>Aw$9$k!#(B
  • $B%G!<%?$N@ZL\$,J]B8$5$l$k!#(B
  • $BBg$-$J%G!<%?$O!"Aw$l$J$$!#:GBg(B 9KB - 64KB $BDxEY!#:GBg$O%7%9%F%`$K$h$k!#(B
  • $B%G!<%?$NAw?.$K$O!"(Bsendto() $B%7%9%F%`%3!<%k!" UDP/IP $B$G$O!"(Bconnect() $B$7$J$1$l$P!"#1$D$N%=%1%C%H$G!"J#?t$NDL?.Ajl=j$+$itelnet

    telnet $B$O!"(BTCP/IP $B$NHFMQ$N%/%i%$%"%s%H(B($BJ8;zNs$NAw

    echo-client-udp

    UDP/IP $B$N%]!<%HHV9f(B 7 (echo) $B$G$O!"e$NM}M3$+$i!"(Becho $B%5!<%S%9$r(B $BDd;_$9$k$3$H$,!"0lHLE*$G$"$k!#0J2<$O!"$3$N%5!<%S%9$rMxMQ$9$k%/%i%$%"%s(B $B%H$G$"$k!#(B
       1:	
       2:	/*
       3:	        echo-client-udp.c -- $BJ8;zNs$rAw
    
    
    

    main $B$NItJ,$O!"(BTCP/IP $BHG$N(B echo $B%5!<%S%9$N%/%i%$%"%s%H(B $B$H$[$H$s$IF1$8$G$"$k!#(B

    main() $B4X?t$O!"%3%^%s%I%i%$%s$N0z?t$rD4$Y$F!"(Becho_client() $B$rFI$s$G$$(B $B$k!#(Bstrtol() $B$G!"J8;zNs$GM?$($i$l$?%]!<%HHV9f$r!"(Bint $B$KJQ49$7$F$$$k!#(B

      33:	
      34:	#define BUFFERSIZE      1024
      35:	
      36:	void
      37:	echo_client_udp( char *server, int portno )
      38:	{
      39:	    int          sock ;
      40:	    int          slen,scount,rcount ;
      41:	    char         sbuf[BUFFERSIZE];
      42:	    char         rbuf[BUFFERSIZE];
      43:	    int          i ;
      44:	    int          fromlen ;
      45:	    struct sockaddr_in to; struct sockaddr_storage from ;
      46:	
      47:	        sock = udp_port_nobind();
      48:	        if( sock<0 )
      49:	            exit( -1 );
      50:	        printf("my port is "); sockname_print( sock ); printf("\n");
      51:	
      52:	        if( sockaddr_in_init( &to, sizeof(to), server, portno )<0 )
      53:	        {
      54:	            perror("sockaddr_in_init");
      55:	            exit( -1 );
      56:	        }
      57:	        printf("server is ");
      58:	        sockaddr_print( (struct sockaddr *)&to, sizeof(to) ); printf("\n");
      59:	
      60:	        printf("==> "); fflush(stdout);
      61:	        while( fgets(sbuf,BUFFERSIZE,stdin) )
      62:	        {
      63:	            slen = strlen( sbuf );
      64:	            printf("sending [%s] (%d bytes) to ", sbuf, slen );
      65:	            sockaddr_print( (struct sockaddr *)&to, sizeof(to) ); printf("\n");
      66:	
      67:	            scount = sendto( sock, sbuf, slen, 0,
      68:	                             (struct sockaddr *)&to, sizeof(to) );
      69:	            if( scount != slen )
      70:	            {
      71:	                perror("sendto()");
      72:	                exit( 1 );
      73:	            }
      74:	            printf("after sendo(), my port is "); sockname_print( sock ); printf("\n");
      75:	
      76:	            fromlen = sizeof( from );
      77:	            rcount = recvfrom( sock, rbuf, BUFFERSIZE, 0,
      78:	                               (struct sockaddr *)&from, &fromlen);
      79:	            if( rcount < 0 )
      80:	            {
      81:	                perror("recvfrom()");
      82:	                exit( 1 );
      83:	            }
      84:	            rbuf[rcount] = 0 ;
      85:	            printf("received %d bytes [%s] from ",rcount, rbuf );
      86:	            sockaddr_print( (struct sockaddr *)&from, fromlen ); printf("\n");
      87:	
      88:	            printf("==> "); fflush(stdout);
      89:	        }
      90:	        printf("\n");
      91:	
      92:	        close( sock );
      93:	}
      94:	
    
    
    echo_client_udp() $B$G$O!"(Budp_port_nobind() $B$H$$$&4X?t$r8F$S=P$7$F$$$k!#(B $B$3$N7k2L!"(BUDP/IP $B$NDL?.MQ%]!<%H$,:n$i$l!"DL?.2DG=$J%U%!%$%k5-=R;R$,JV$5$l$k!#(B $B$?$@$7!"%5!<%P$H$N4V$K$O!"DL?.O)$O3NJ]$5$l$J$$!#$3$N%U%!%$%k5-=R;R$O!"(B $BI8=`F~=PNO(B(0,1,2)$B$d(B open() $B%7%9%F%`!&%3!<%k$N7k2L$HF1$8$b$N$G!"ITMW$K(B $B$J$C$?$i(B close() $B$G2rJ|$9$k!#$7$+$7!"$3$N>uBV$G$O!"(Bwrite() $B$d(B read() $B%7%9%F%`%3!<%k$O;H$($J$$!#$=$NBe$j$K!"(Bsendto() $B$d(B recvfrom() $B%7%9%F%`(B $B%3!<%k$r;H$&!#(B

    $B%/%i%$%"%s%HB&$G$O!"(Bbind() $B$G%"%I%l%9(B(IP$B%"%I%l%9$H%]!<%HHV9f(B)$B$r@_Dj$7(B $B$J$$$3$H$,B?$$!#DL?.$K;H$&A0$K$O!"%"%I%l%9$O8GDj$5$l$F$$$J$$!#DL?.$K;H(B $B$&$H!"$=$N=V4V$K8GDj$5$l!"(Bclose() $B$9$k$^$GM-8z$G$"$k!#(B($B%/%i%$%"%s%HB&(B $B$G$b!"(Bbind() $B$G%"%I%l%9$r8GDj$9$k$3$H$b$G$-$k$,!"0lHLE*$G$O$J$$!#(B)

    sockaddr_in_init() $B$O!"9=B$BN(B to $B$KAw$j@h$N%"%I%l%9(B(IP$B%"%I%l%9$H%]!<%H(B $BHV9f(B)$B$r%;%C%H$7$F$$$k!#(B

    $BAw$k%G!<%?$O!"(BTCP/IP$BHG$NF1$8$/J8;zNs$G$"$k!#(BUDP/IP $B$NDL?.$G$O!"%G!<%?(B $B$N6h@Z$j$OJ]B8$5$l$k$N$G!"9TKv$N6h@Z$j$r$D$1$:$K9=B$BN$r$=$N$^$^Aw$k$b(B $B$N$bB?$$!#(B

    sendto() $B%7%9%F%`%3!<%k$G!"%G!<%?$rAw?.$7$F$$$k!#Aw$j@h$O!"Bh(B5$B0z?t$K;X(B $BDj$5$l$F$$$k!#(BTCP/IP $B$H$O0[$J$j!"%G!<%?$N6h@Z$j$OJ]B8$5$l$k!#$^$?!"0l(B $BEY$KA4%G!<%?$,Aw$i$l$k$N$G!"(BTCP/IP $B$H$O0[$J$j!"A4%G!<(B $B%?$rAw$j=P$9$?$a$N%k!<%W$OITMW$G$"$k!#$?$@$7!"0lEY$KAw$k$3$H$,$G$-$k%G!<(B $B%?$NBg$-$5$K$O>e8B$,$"$k!#(B

    $BESCf!"3,AX$NDL?.G^BN$N>e8B$r1[$($?>l9g!"!V%U%i%0%a%s%H2=!W$,9T$o$l!"l9g!"%U%i%0%a%s%H2=$5$l$k!#%U%i%0%a%s%H2=$5$l$?%G!<(B $B%?$O!"

    $B%G!<%?$r

    recvfrom() $B$G$O!":G8e$K=*C<$N(B 0 $B$rIU$1$F$/$l$J$$$N$G!"<+J,$G(B 0 $B$rIU$1(B $B$F$$$k!#(B

      95:	int
      96:	udp_port_nobind()
      97:	{
      98:	    int s ;
      99:	        if( (s = socket(PF_INET, SOCK_DGRAM, 0)) < 0 )
     100:	        {
     101:	            perror("socket");
     102:	            return( -1 );
     103:	        }
     104:	        return( s );
     105:	}
     106:	
    
    

    udp_port_nobind() $B$O!"%/%i%$%"%s%HB&$N(B UDP/IP $B$N%]!<%H$r:n$k4X?t$G$"$k!#(B $BFbIt$G$O!"%=%1%C%H$r(B socket() $B%7%9%F%`%3!<%k$G:n@.$7$F$$$k$@$1$G$"$k!#(B PF_INET $B$H(B SOCK_DGRAM$B$NAH$_9g$o$;(B$B$J$N$G!"(B UDP $B$r;H$&$3$H$r0UL#$9$k!#(B socket() $B$N0z?t$G!"(BPF_INET $B$NJQ$j$K!"(BAF_INET $B$H=q$$$F$b$h$$!#$3$3$G$O!"(B Protocol $B$rA*$s$G$$$k$N$G!"(BPF_ $B$,@5$7$$$,!"

    UDP/IP $B$G$b!"(Bconnect() $B%7%9%F%`%3!<%k$G@\B3@h$r8GDj$9$kJ}K!$b$"$k$,!"(B $B0lHLE*$G$O$J$$!#@\B3@h$r8GDj$7$?>l9g$O!"(Bsendto() $B$d(B recvfrom() $B$G$O$J(B $B$/!"(Bwrite() $B$d(Bread() $B$r;H$C$FDL?.$9$k$3$H$b$G$-$k!#$=$N>l9g$b!"(BUDP $B$N(B $B@-(B $BAw$O9T$o$l$J$$!#(B

     107:	int
     108:	sockaddr_in_init( struct sockaddr_in *addr, int addrlen,
     109:	                  char *hostname, int portno )
     110:	{
     111:	    struct addrinfo hints, *ai;
     112:	    int err ;
     113:	
     114:	        if( addrlen < sizeof(struct sockaddr_in) )
     115:	        {
     116:	            fprintf(stderr,"sockaddr_in, not enough space (%d) > (%d)\n",
     117:	                     addrlen, sizeof(struct sockaddr_in) );
     118:	            return( -1 );
     119:	        }
     120:	        memset( &hints, 0, sizeof(hints) );
     121:	        hints.ai_family   = AF_INET ;
     122:	        hints.ai_socktype = SOCK_DGRAM ;
     123:	        if( (err = getaddrinfo( hostname, NULL, &hints, &ai )) )
     124:	        {
     125:	            fprintf(stderr,"unknown host %s (%s)\n",hostname,
     126:	                    gai_strerror(err) );
     127:	            return( -1 );
     128:	        }
     129:	        if( ai->ai_addrlen > addrlen )
     130:	        {
     131:	            fprintf(stderr,"sockaddr too large (%d) > (%d)\n",
     132:	                    ai->ai_addrlen,sizeof(addr) );
     133:	            freeaddrinfo( ai );
     134:	            return( -1 );
     135:	        }
     136:	        memcpy( addr, ai->ai_addr, ai->ai_addrlen );
     137:	        addr->sin_port = htons( portno );
     138:	        freeaddrinfo( ai );
     139:	
     140:	        return( 0 );
     141:	}
     142:	
    
    
    UDP/IP $B$N>l9g$b!"(BTCP/IP $B$HF1MM$K!"%"%I%l%9$N;XDj$K$O!"(Bsockaddr_in $B9=B$(B $BBN$r;H$&!#(Bsendto() $B%7%9%F%`%3!<%k$N%^%K%e%"%k$K$O!"(Bsockaddr $B9=B$BN$r;H(B $B$&$h$&$K$H=q$+$l$F$$$k$,!"(BUDP/IP (IPv4) $B$G$O!"$=$N%5%V%/%i%9(B($B%*%V%8%'(B $B%/%H;X8~MQ8l(B)$B$G$"$k(Bsockaddr_in $B$r;H$&!#$3$N>l9g!"(BIP $B%"%I%l%9$H%]!<%HHV(B $B9f$,Kd$a$i$l$F$$$kI,MW$,$"$k!#$=$NB>$K@hF,$K!"(Bsockaddr_in $B$G$"$k$3$H$r(B $B<($9Dj?t(B AF_INET $B$rCV$/!#(B getaddrinfo() $B$O!"%[%9%HL>$r(B IP $B%"%I%l%9$7!"$5$i$K!"@hF,$KDj?t(B AF_INET $B$r@_Dj$7$F$$$k!#%]!<%HHV9f$O!"Bh#20z?t$,(B NULL $B$J$N$G!"(B0 $B$r;XDj$7$F$$$k!#(B $B$3$NNc$G$O!"0z?t$GM?$($i$l$?%]!<%HHV9f$r(B htons() $B$r2p$7$F%P%$%H%*!<%@(B $B$rD4@0$7$F$+$i@_Dj$7$F$$$k!#(B

     143:	void
     144:	sockaddr_print( struct sockaddr *addrp, int addr_len )
     145:	{
     146:	    char host[BUFFERSIZE] ;
     147:	    char port[BUFFERSIZE] ;
     148:	        if( getnameinfo(addrp, addr_len, host, sizeof(host),
     149:	                        port, sizeof(port), NI_NUMERICHOST|NI_NUMERICSERV)<0 )
     150:	            return;
     151:	        printf("%s:%s", host, port );
     152:	}
     153:	
     154:	void
     155:	sockname_print( int s )
     156:	{
     157:	    struct sockaddr_storage addr ;
     158:	    int len ;
     159:	        len = sizeof( addr );
     160:	        if( getsockname( s, (struct sockaddr *)&addr, &len )< 0 )
     161:	        {
     162:	            perror("getsockname");
     163:	            exit( -1 );
     164:	        }
     165:	        sockaddr_print( (struct sockaddr *)&addr,len );
     166:	}
    
    
    sockaddr_print() $B$O!"(B echo-server-nofork-fdopen.c $B$N$b$N$HF1$8$G$"$k!#(B getaddrinfo() $B%i%$%V%i%j4X?t$K$h$j!"%[%9%HL>$H%]!<%HHV9f$NJ8;zNsI=8=$r(B $BF@$F$$$k!#J8;zNs$H$$$C$F$b!"(BNI_NUMERICHOST|NI_NUMERICSERV $B$H$$$&%U%i%0(B $B$r;XDj$7$F$$$k$N$G!"7k2L$O(B "123.4.5.6" $B$d(B "80" $B$N$h$&$J?t;z$NJB$S$K$h(B $B$kI=5-$K$J$k!#(B

    sockname_print() $B$O!"<+J,<+?H$N%]!<%H$N%"%I%l%9$rI=<($9$k4X?t$G$"$k!#(B $B%"%I%l%9$O!"(Bgetsockname() $B$GF@$i$l$k!#$J$*!"(BUDP/IP $B$G$O!"(BTCP/IP $B$H$O0[(B $B$J$j!"(Bgetpeername() $B$GDL?.Ajl9g$G$-$J$$!#(BUDP/IP $B$G$O!"DL?.Ajecho-server-nofork-fdopen.c $B$N(B tcp_peeraddr_print() $B$N(B getpeername() $B$r!"(Bgetsockname() $B$KJQ$($?$b$N$G$"$k!#(Bgetsockname() $B$O!"<+J,<+?H$NL>A0(B(TCP/IP $B$G$O!"(BIP $B%"%I%l%9$H%]!<%HHV9f(B)$B$rF@$k$?$a$N%7%9%F%`%3!<%k$G$"$k!#(B

    $B

    % cp ~yas/syspro/ipc/echo-client-udp.c . [$B
    % make echo-client-udp [$B
    cc     echo-client-udp.c   -o echo-client-udp
    % ./echo-client-udp localhost 7 [$B
    my port is 0.0.0.0:0
    server is 127.0.0.1:7
    ==> hello[$B
    sending [hello
    ] (6 bytes) to 127.0.0.1:7
    after sendo(), my port is 0.0.0.0:33041
    received 6 bytes [hello
    ] from 127.0.0.1:7
    ==> world![$B
    sending [world!
    ] (7 bytes) to 127.0.0.1:7
    after sendo(), my port is 0.0.0.0:33041
    received 7 bytes [world!
    ] from 127.0.0.1:7
    ==> ^D
    % ./echo-client-udp adonis8 7 [$B
    my port is 0.0.0.0:0
    server is 130.158.86.28:7
    ==> aaa[$B
    sending [aaa
    ] (4 bytes) to 130.158.86.28:7
    after sendo(), my port is 0.0.0.0:33041
    received 4 bytes [aaa
    ] from 130.158.86.28:7
    ==> bbb[$B
    sending [bbb
    ] (4 bytes) to 130.158.86.28:7
    after sendo(), my port is 0.0.0.0:33041
    received 4 bytes [bbb
    ] from 130.158.86.28:7
    ==> ^D
    % []
    
    $B$3$N%W%m%0%i%`$O!"%3%^%s%I%i%$%s$+$i#2$N0z?t$r$H$k!#Bh#10z?t$O!"%[%9%H(B $BL>!"Bh#20z?t$O!"%]!<%HHV9f$G$"$k!#$3$N%W%m%0%i%`$O!"I8=`F~NO$+$iF@$i$l(B $B$?9T$r!"$=$N;XDj$5$l$?%[%9%H>e$N%]!<%HHV9f$GF0:n$7$F$$$k%5!<%P$KBP$7$F(B $BAw$k!#%5!<%P$O!"(B $BF1$8$b$N$rAw$jJV$7$F$/$k$N$G!"$=$l$r

    echo-server-udp.c

    UDP/IP $B$N%]!<%HHV9f(B 7 (echo) $B$G$O!" 1: 2: /* 3: echo-server-udp.c -- $BJ8;zNs$rAw TCP$BHG$N(Becho $B%5!<%S%9$N%5!<%P(B $B$HF1MM$K!"(B $B0z?t$H$7$F!"%]!<%HHV9f$re$N$h$&$K(B UID $B$+$i@8@.$9$kJ}K!$O!"0lHLE*$G$O$J$$!#!JC^GHBg3X>pJs3XN`$N%7%9%F%`$G(B $B$O$&$^$/F/$/!#!K(B

      34:	#define BUFFERSIZE      1024
      35:	
      36:	void
      37:	echo_server_udp( int portno )
      38:	{
      39:	    int s, rcount, scount, addrlen ;
      40:	    struct sockaddr_storage addr ;
      41:	    char buffer[BUFFERSIZE];
      42:	
      43:	        s = udp_port_bind( portno );
      44:	        if( s<0 )
      45:	            exit( -1 );
      46:	        printf("my port is "); sockname_print( s ); printf("\n");
      47:	
      48:	        while( 1 )
      49:	        {
      50:	            addrlen = sizeof( addr );
      51:	            rcount = recvfrom( s, buffer, BUFFERSIZE, 0,
      52:	                               (struct sockaddr *)&addr, &addrlen );
      53:	            if( rcount < 0 )
      54:	            {
      55:	                perror("recvfrom()");
      56:	                exit( 1 );
      57:	            }
      58:	            buffer[rcount] = 0 ;
      59:	            printf("received %d bytes [%s] from ",rcount, buffer );
      60:	            sockaddr_print( (struct sockaddr *)&addr,addrlen ); printf("\n");
      61:	
      62:	            printf("sending back [%s] (%d bytes) to ", buffer, rcount );
      63:	            sockaddr_print( (struct sockaddr *)&addr,addrlen ); printf("\n");
      64:	            scount=sendto( s, buffer, rcount, 0, (struct sockaddr *)&addr, addrlen );
      65:	            if( scount!= rcount )
      66:	            {
      67:	                perror("sendto()");
      68:	                exit( 1 );
      69:	            }
      70:	        }
      71:	}
      72:	
    
    
    udp_port_bind() $B$O!"0z?t$GM?$($i$l$?%]!<%HHV9f$r;H$C$F(BUDP/IP $B$N%]!<%H(B $B$r:n@.$7!"$=$N%U%!%$%k5-=R;R(B($B%=%1%C%H(B)$B$rJV$9!#(Bsockname_print() $B$O!"$=(B $B$N%"%I%l%9(B(IP$B%"%I%l%9$H%]!<%HHV9f(B)$B$rI=<($9$k!#(B TCP/IP $B$H$O0[$J$j!"$3$N%]!<%H$O!"$=$N$^$^DL?.$K;H$&$3$H$,$G$-$k!#(B $B5U$K!"(Baccept() $B$O;H$&$3$H$O$G$-$J$$!#(B

    $B%5!<%P$N%W%m%0%i%`$NFCD'$O!"FbIt$KL58B%k!<%W$r;}$C$F$$$k$3$H$G$"$k!#(B $B%5!<%P$O!"IaDL$N>uBV$G$O!"=*N;$7$J$$!#(B

    $B$3$N%5!<%P$O!"(Bfork() $B$7$J$$!#%5!<%S%9$NFbMF$,4JC1$G$"$j!"(Bsendto() $B%7%9(B $B%F%`%3!<%k$G%V%m%C%/$9$k$3$H$b$J$$$+$i$G$"$k!#%5!<%S%9$,=E$?$$;~$K$O!"(B $BB>$N%/%i%$%"%s%H$+$i$N=hM}$rJBNs$K?J$a$k$?$a$K!";R%W%m%;%9$r:n$k$3$H2D(B $BG=$G$"$k!#(B

      73:	int
      74:	udp_port_bind( int portno )
      75:	{
      76:	    struct sockaddr_in addr ;
      77:	    int addr_len ;
      78:	    int s ;
      79:	
      80:	        if( (s = socket(PF_INET, SOCK_DGRAM, 0)) < 0 )
      81:	        {
      82:	            perror("socket");
      83:	            return( -1 );
      84:	        }
      85:	
      86:	        memset( &addr, 0, sizeof(addr) );
      87:	        addr.sin_family = AF_INET ;
      88:	        addr.sin_addr.s_addr = INADDR_ANY ;
      89:	        addr.sin_port = htons( portno );
      90:	
      91:	        if( bind(s,(struct sockaddr *)&addr,sizeof(addr)) < 0 )
      92:	        {
      93:	            perror("bind");
      94:	            fprintf(stderr,"port number %d is already used. wait a moment or kill another program.\n", portno );
      95:	            return( -1 );
      96:	        }
      97:	        return( s );
      98:	}
      99:	
    ...
     102:	sockaddr_print( struct sockaddr *addrp, int addr_len )
    ...
     113:	sockname_print( int s )
    
    
    udp_port_bind() $B$O!"%5!<%PMQ$K!"%]!<%HHV9f$r8GDj$7$?(B UDP/IP $B$N%]!<%H$r:n@.$9$k!#(B $B%/%i%$%"%s%HB&(B$B$H$N0c$$$O!"(B bind() $B%7%9%F%`%3!<%k$r;H$C$F$$$kE@$K$"$k!#(B

    bind() $B%7%9%F%`%3!<%k$N0z?t$O!"(B TCP$BHG$N(Becho $B%5!<%S%9$N%5!<%P(B $B$HF1$8$G$"$k!#(B $B%=%1%C%H$,:n@.$G$-$?$i!"(Bbind() $B%7%9%F%`%3!<%k$G!"%5!<%PB&$GMxMQ$9$k%"(B $B%I%l%9(B(IP$B%"%I%l%9$H%]!<%HHV9f(B)$B$r@_Dj$9$k!#(BIP $B%"%I%l%9$O!"IaDL$O!"(B INADDR_ANY $B$r;XDj$9$k!#J#?t$N(B IP $B%"%I%l%9$,$"$k;~$K$O!"$I$l$KMW5a$,Mh(B $B$F$b

    $B%]!<%HHV9f$O!"0z?t$GM?$($i$l$?$b$N$r!"(Bhtons() $B$G%M%C%H%o!<%/!&%P%$%H%*!<(B $B%@$KJQ49$7$FM?$($k!#(B

    listen() $B%7%9%F%`%3!<%k$O!"(BUDP/IP $B$G$O;H$o$l$J$$!#(B $BMW5a!"$9$J$o$A!"%G!<%?$,BgNL$KAw$i$l!"%5!<%P$,=hM}$G$-$J$$;~$K$O!"!JIa(B $BDL$O8E$$$b$N$+$i=g$K!K

    $B

    $B%5!<%P$O!"=*N;$7$J$$$N$G!":G8e$K!"(B^C $B$r2!$7$F!"3d$j9~$_$r3]$1(B $B$F=*N;$5$;$k!#(B

    $BCm0U!'A40w$,F1$8%3%s%T%e!<%?$G%]!<%HHV9f(B 1231 $B$r;H$&$H%W%m%0%i%`$,F0$+$J$$$3$H$,$"$k!#(B

    % ./echo-server-udp 1231 [$B
    my port is 0.0.0.0:1231
    received 6 bytes [hello
    ] from 127.0.0.1:33042
    sending back [hello
    ] (6 bytes) to 127.0.0.1:33042
    received 7 bytes [world!
    ] from 127.0.0.1:33042
    sending back [world!
    ] (7 bytes) to 127.0.0.1:33042
    received 4 bytes [aaa
    ] from 130.158.86.28:33015
    sending back [aaa
    ] (4 bytes) to 130.158.86.28:33015
    received 4 bytes [133
    ] from 130.158.86.28:33015
    sending back [133
    ] (4 bytes) to 130.158.86.28:33015
    ^C
    % []
    
    $B%5!<%PB&$G$O!"(Bbind() $B$r$D$+$C$F$$$k$N$G!":G=i$+$i%]!<%HHV9f$,8GDj$5$l(B $B$F$$$k$3$H$,$o$+$k!#(B

    $B%f!<%6$H%0%k!<%W(B

    $B%f!<%6(B

    $B%f!<%6(B(user, $BMxMQ$B%f!<%6L>(B(user name) $B$H$$$&J8;zNs!"$^$?$O!"$=$l$H$[$\#1BP#1$KBP1~$7$?(B16$B%S%C%H$N@0?t(B(Linux$B$G$O(B 32$B%S%C%H(B)$B$GI=$9!#$3$N?t$r(B UID(user ID, user identifier) $B$H$$$&!#(B

    Unix$B$G$O!"A4$F$N%U%!%$%k$d%W%m%;%9$O!"$"$k%f!<%6$N=jM-J*$G$"$k!#$3$l$r!"(B Unix$B$G$O!"%U%!%$%k$H%W%m%;%9$KB0@-$H$7$F!"(BUID $B$r;}$?$;$k$3$H$G

    $B?^(B? $B<B@$3&$N%f!<%6$H(BUnix$BCf$N%W%m%;%9!&%U%!%$%k(B

    $B?^(B? $B

    $B%0%k!<%W(B

    $B%0%k!<%W(B(group)$B$H$O!"%3%s%T%e!<%?$N@$3&$G$O!"(B $B%3%s%T%e!<%?(B $B$r;H$&?M4V$N=89g(B $B$N$3$H$G$"$k!#%3%s%T%e!<%?$NFbIt$G$O!"%f!<%6L>!?(BUID$B$HF1MM$K!"(B $B%0%k!<%WL>(B(group name) $B$H8F$P$l$kJ8;zNs!"$^$?$O!"$=$l$H$[$\#1BP#1$KBP1~$7$?(B16$B%S%C%H$N@0?t(B (Linux$B$G$O(B32$B%S%C%H(B)$B$GI=$9!#$3$N?t$r(B GID(group ID, group identifier) $B$H8@$&!#(B

    $B#1?M$N%f!<%6$,J#?t$N%0%k!<%W$KB0$9$k$3$H$,$"$k!#(B

    $B%U%!%$%k$NB0@-$H(Bls -l

    $B%U%!%$%k$K$O!"FbMF$NB>$KB0@-(B(attribute)$B$,$"$k!#%U%!%$%k$NB0@-$O!"(Bls -l $B$GI=<($5$l$k!#(B
    % ls -l proc-uid-print.c [$B
    -rw-r--r--    1 yas      lab          1769 Jun 16 22:37 proc-uid-print.c
    % []
    
    $B9T$N:8$+$i!"7?$H%b!<%I!"%j%s%/?t!"%f!<%6L>!J=jM-!"Bg$-(B $B$5!"99?7;~9o!"L>A0$,I=<($5$l$F$$$k!#(B

    $B%U%!%$%k$N7?(B

    ls -l $B$G!"0lHV:8$NJ8;z$O!"(B $B%U%!%$%k$N7?(B $B$rI=$o$7$F$$$k!#(B -$B$N>l9g$OIaDL$N%U%!%$%k!"(B d$B$N>l9g$O%G%#%l%/%H%j$r0UL#$9$k!#(B

    $B5v2D$5$l$?%"%/%;%9J}K!(B($B%b!<%I(B)

    ls -l $B$G!"(B2$BJ8;zL\$+$i(B9$BJ8;zL\$^$G$O!"%"%/%;%9$N2DH]$r7h$a$k$?$a$N>pJs$G(B $B$"$k!#$3$N#9J8;z$r!"%b!<%I$H$$$&(B($B7?$^$G4^$a$F%b!<%I$H8F$V$3$H$b$"$k(B)$B!#(B 9$BJ8;z$O!"(B3$BJ8;z$N8G$^$j$,(B3$BAH$KJ,$1$i$l$k!#(B

    1$B$D$N%V%m%C%/$NCf$N(B3$BJ8;z$O%"%/%;%9Kh$K$=$N5v2D!&5qH]$rI=$9!#(B

    r	$BFI9~$_2D(B
    w	$B=q9~$_2D(B
    x	$Bl9g$OC5:w2D(B)
    
    $B#9J8;z$N$&$A!"3:Ev$9$kItJ,$,!V(B-$B!W$N>l9g$O!"$=$N

    $B!VFI9~$_2D!W$H$O!"$=$NFbMF$r;2>H$9$k$3$H$,$G$-$k$H$$$&0UL#$9$k!#$?$H$((B $B$P!"FI$_=P$72DG=$J%U%!%$%k$O!"(Bcp $B%3%^%s%I$G%3%T!<$7$?$j!"(Bless $B$GFbMF$r(B $BI=<($9$k$3$H$,$G$-$k!#FI=P$72DG=$J%G%#%l%/%H%j$J$i!"(Bls $B%3%^%s%I$G$=$N(B $B%G%#%l%/%H%jCf$N%U%!%$%kL>$N0lMw$rI=<($9$k$3$H$,$G$-$k!#(B

    $B!V=q9~$_2D!W$H$O!"$=$NFbMF$rJQ99$9$k$3$H$,$G$-$k$H$$$&0UL#$G$9!#$?$H$((B $B$P!"%F%-%9%H!&%U%!%$%k$J$i!"%(%G%#%?$G=$@5$7$?$b$N$r=q$-9~$`$3$H$,$G$-(B $B$k!#=q9~$_2DG=$J%G%#%l%/%H%j$J$i!"(Bmv $B%3%^%s%I$G$=$N%G%#%l%/%H%j$N$J$+(B $B$K$"$k%U%!%$%kL>A0$rJQ99$9$k$3$H$,$G$-$k!#(B

    $B!Vl9g$O!"(B $B$=$N%W%m%0%i%`$r

    $B!V8!:w2D!W$H$$$&$N$O!"$=$N2<$K$"$k%U%!%$%k$d%G%#%l%/%H%j$r(B $B$?$0$k$3$H$,$G$-$k$3$H$r0UL#$9$k!#(B $B%G%#%l%/%H%j$,!VFI9~$_2D!W$G$b!"!V8!:w2D!W$G$J$$$H!"(B $B%G%#%l%/%H%j$K!VFI9~$_2D!W$N%U%!%$%k$,$"$C$F$b!"(B $B%G%#%l%/%H%j0J2<$N%U%!%$%k$rFI$`$3$H$,$G$-$J$$!#(B $B5U$K!"!V8!:w2D!W$G$b!"%G%#%l%/%H%j$,!VFI9~$_2D!W$G$J$$$H!"(B $B%G%#%l%/%H%j$K$"$k%U%!%$%kL>$d%G%#%l%/%H%jL>$r(B ls $B$GI=<($5$;$k$3$H$,(B $B$G$-$J$$$,!"$=$N%G%#%l%/%H%j$K$"$k%U%!%$%kL>$rCN$C$F$$$F!"(B $B$=$N%U%!%$%k$,!VFI$_9~$_2D!W$J$i(B less $B$J$I$GI=<($5$;$k$3$H$O$G$-$k!#(B

    $B$"$k%U%!%$%k$r!"FCDj$N?M$K$@$1FCDj$N%"%/%;%9$NJ}K!$r$5$;$?$$$3$H$,$"$k!#(B $B$3$N$?$a$K!"$=$N$?$a$K!"(Brwx$B$N;XDj$O!"%U%!%$%k$N=jM-

    $B$?$H$($P!"%b!<%I$,!V(Brw-r--r--$B!W$N%U%!%$%k$O!"

    $B%U%!%$%k$N=jM- $BFI$_=q$-$O$G$-$k$,!" $B%U%!%$%k$NB0$9%0%k!<%W$KB0$9$k?M(B
    $BFI$a$k$,=q$$$?$j $B$=$NB>$N?M(B
    $BFI$a$k$,=q$$$?$j

    $B%j%s%/?t(B

    Unix $B$G$O!"LZ9=B$$rMQ$$$F%U%!%$%k$KL>A0$rIU$1$k!#(B $B%j%s%/?t$N%j%s%/$H$O!"(B$BLZ9=B$$N;^(B$B!"$D$^$j!"(B $B%U%!%$%k$NL>A0$H$$$&0UL#$G$"$k!#(B $B%j%s%/?t$O!"%U%!%$%k$NL>A0$N$&$A!"(B$B$B$N?t$r<($9!#(B

    $BIaDL$N%U%!%$%k$O!"B?$/$N>l9g!"%j%s%/?t$,#1$K$J$C$F$$$k!#%G%#%l%/%H%j$O!"(B $B!V(B.$B!W$d!V(B..$B!W$G$b%"%/%;%9$G$-$k$N$G!"%j%s%/?t$,#20J>e$K$J$C$F$$$k!#(B

    $B=jM-

    ls -l $B$NI=<($NCf$G!":8$+$i(B3$BHVL\$N8G$^$jI=<($5$l$k$N$,!"%U%!%$%k$d%G%#(B $B%l%/%H%j$N(B $B=jM- $B!J(B owner $B!K(B $B$G$"$k!#(B

    $B%U%!%$%k$NB0@-$H$7$F$O!"(BUID $B$GJ]B8$5$l$F$$$k$,!"(Bls - l $B$G$O!"$=$l$r%f!<(B $B%6L>$KJQ49$7$FI=<($9$k!#(B

    $B%0%k!<%WL>(B

    UNIX$B$G$OJ#?t$N%f!<%6$,B0$9(B $B%0%k!<%W(B $B!J(B group $B!K(B $B$H$$$&$b$N$r@_Dj$G$-$k!#(B $B$"$k%U%!%$%k$O!"I,$:$I$l$+0l$D$N%0%k!<%W$K=jB0$9$k!#(B $B%U%!%$%k$NB0@-$H$7$F$O!"(BGID $B$GJ]B8$5$l$F$$$k$,!"(Bls -l $B$G$O!"$=$l$r%0%k!<(B $B%WL>$KJQ49$7$FI=<($9$k!#(B

    $BBg$-$5(B

    ls -l $B$N#5HVL\$N7e$O!"(B $B%U%!%$%k$N(B$BBg$-$5(B $B$G$"$k!#$3$l$O!"(B $B%U%!%$%k$NFbMF$r%P%$%H?t$G?t$($?CM$G$"$k!#(B

    $B;~9o(B

    UNIX$B$N%U%!%$%k$NB0@-$K$O
    $B:G=*%"%/%;%9;~9o(B (the last access time)
    $B%U%!%$%k$N!VFbMF!W$,:G8e$K%"%/%;%9!JFI$_9~$_!K$5$l$?;~9o!#(B ls -lu $B$GI=<($5$l$k!#(B
    $B:G=*99?7;~9o(B (the modification time)
    $B%U%!%$%k$N!VFbMF!W$,:G8e$KJQ99!J=q$-9~$_!K$5$l$?;~9o!#(B ls -l $B$GI=<($5$l$k!V;~9o!W!#(B $BC1$K!V%U%!%$%k$N;~9o!W$H$$$C$?>l9g$K$O$3$N;~9o$r;X$9!#(B
    $B:G=*JQ99;~9o(B (the status change time)
    $B%U%!%$%k$N!VB0@-!W$,:G8e$KJQ99$5$l$?;~9o!#(B ls -lc$B$GI=<($5$l$k!V;~9o!W!#(B $B;~9o$bB0@-$N#1$D$J$N$G!"!V:G=*99?7;~9o!W$rJQ99$9$k$H!"(B $B!V:G=*JQ99;~9o!W$bJQ99$5$l$k!#(B

    $B%U%!%$%k$NB0@-$NJQ99(B

    $B%U%!%$%k$H%G%#%l%/%H%j$NB0@-$N$&$A0J2<$N$b$N$OJQ99$G$-$k(B
    • $B%b!<%I(B(chmod $B%3%^%s%I!"(Bchmod $B%7%9%F%`%3!<%k(B)
    • $B=jM- $B%0%k!<%W(B(chgrp $B%3%^%s%I!"(Bchown $B%7%9%F%`%3!<%k(B)
    • $B:G=*99?7;~9o$H:G=*%"%/%;%9;~9o(B(touch $B%3%^%s%I!"(Butime $B%7%9%F%`%3!<%k(B)
    $B$?$@$7!"=jM-$B%9!<%Q!<%f!<%6(B(root)$B$N(B $B8"8B$,I,MW$G$"$k!#(B

    $B%U%!%$%k$NB0@-$H(B stat $B%7%9%F%`%3!<%k(B

    $B#U#N#I#X$G$O!"(Bstat() $B!J$"$k$$$O!"(Blstat(), fstat()$B!K%7%9%F%`!&%3!<%k$r(B $BMQ$$$F%U%!%$%k$NB0@-$rD4$Y$k$3$H$,$G$-$k!#(B $B 1: /* 2: ystat.c -- stat $B%7%9%F%`!&%3!<%k$N%7%'%k!&%$%s%?%U%'!<%9(B 3: ~yas/syspro/file/ystat.c 4: Created on: 1995/03/07 20:59:12 5: */ 6: 7: #include <sys/types.h> /* stat(2) */ 8: #include <sys/stat.h> /* stat(2) */ 9: #include <sys/sysmacros.h> /* major(), minor() */ 10: #include <stdio.h> 11: 12: extern void stat_print( char *path ); 13: 14: main( int argc, char *argv[] ) 15: { 16: if( argc != 2 ) 17: { 18: fprintf( stderr,"Usage:%% %s filename \n",argv[0] ); 19: exit( 1 ); 20: } 21: stat_print( argv[1] ); 22: } 23: 24: void 25: stat_print( char *path ) 26: { 27: struct stat buf ; 28: if( stat( path,&buf ) == -1 ) 29: { 30: perror( path ); 31: exit( 1 ); 32: } 33: 34: printf("path: %s\n",path ); 35: printf("dev: %d,%d\n",major(buf.st_dev),minor(buf.st_dev) ); 36: printf("ino: %d\n",buf.st_ino ); 37: printf("mode: 0%o\n",buf.st_mode ); 38: printf("nlink: %d\n",buf.st_nlink ); 39: printf("uid: %d\n",buf.st_uid ); 40: printf("gid: %d\n",buf.st_gid ); 41: printf("rdev: %d,%d\n",major(buf.st_rdev),minor(buf.st_rdev) ); 42: printf("size: %d\n",buf.st_size ); 43: printf("blksize: %d\n",buf.st_blksize ); 44: printf("blocks: %d\n",buf.st_blocks ); 45: printf("atime: %s",ctime(&buf.st_atime) ); 46: printf("mtime: %s",ctime(&buf.st_mtime) ); 47: printf("ctime: %s",ctime(&buf.st_ctime) ); 48: }

    stat() $B%7%9%F%`%3!<%k$O!"0z?t$H$7$F!"%U%!%$%kL>!J%U%!%$%k$d%G%#%l%/%H(B $B%j$NL>A0!"%Q%9L>!K$H!"(Bstruct stat $B$N%]%$%s%?$r % man 2 stat [$B STAT(2) System calls STAT(2) NAME stat, fstat, lstat - get file status SYNOPSIS #include #include #include int stat(const char *file_name, struct stat *buf); int fstat(int filedes, struct stat *buf); int lstat(const char *file_name, struct stat *buf); DESCRIPTION ... They all return a stat structure, which contains the fol- lowing fields: struct stat { dev_t st_dev; /* device */ ino_t st_ino; /* inode */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device type (if inode device) */ off_t st_size; /* total size, in bytes */ unsigned long st_blksize; /* blocksize for filesystem I/O */ unsigned long st_blocks; /* number of blocks allocated */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last change */ }; ... $B$3$N9=B$BN$r;H$&8B$j!"0\?"@-$,$"$k(B(portable)$B%W%m%0%i%`$,=q$1$k!#/$7J#;($J9=B$$r$7$F$$$k$3$H$,$"$k!#$?$H$($P!"(BLinux $B$G$O!"(B/usr/include/bits/stat.h $B$KDj5A$,$"$k!#(B

    % cp ~yas/syspro/file/ystat.c . [$B
    % make ystat [$B
    cc     ystat.c   -o ystat
    % ./ystat ystat.c [$B
    path: ystat.c
    dev: 0,9
    ino: 81494554
    mode: 0100644
    nlink: 1
    uid: 1013
    gid: 40
    rdev: 0,0
    size: 1183
    blksize: 4096
    blocks: 8
    atime: Sat Jun 11 19:19:38 2005
    mtime: Sat Jun 11 19:17:58 2005
    ctime: Sat Jun 11 19:17:58 2005
    % []
    
    
    $B$3$N
  • $B%U%!%$%kL>$O!"(Bystat.c$B!!$G$"$k!#(B
  • $BB8:_$9$k%G%P%$%9$O!"%a%8%c! $B%"%$%N!<%IHV9f$O!"(B81494554 $B$G$"$k!#(B
  • $B%b!<%I$O!"(B0100644 $B$G$"$k!#(B
  • $B%j%s%/?t(B($BK\L>$N?t(B)$B$O!"(B1$B$G$"$k!#(B
  • $B%U%!%$%k$N=jM- $B%U%!%$%k$N%0%k!<%W$O!"(B40$B$G$"$k!#(B
  • $B%G%P%$%9$N<1JL;R$O!"%a%8%c!l9gL58z!#%G%P%$%9!&%U%!%$%k$N$_M-8z!#!K(B
  • $B%U%!%$%k$NBg$-$5$O!"(B1183$B%P%$%H$G$"$k!#(B
  • $BF~=PNO$KE,$7$?%V%m%C%/%5%$%:$O!"(B4096$B%P%$%H$G$"$k!#(B
  • $B%G%#%9%/Cf$GCHq$7$F$$$k$N$O!"(B8$B%V%m%C%/$G$"$k!#(B
  • $B:G=*%"%/%;%9;~9o$O!"(Batime: Sat Jun 11 19:19:38 2005 $B$G$"$k!#(B
  • $B:G=*99?7;~9o$O!"(Bmtime: Sat Jun 11 19:17:58 2005 $B$G$"$k!#(B
  • $B:G=*JQ99;~9o$O!"(BSat Jun 11 19:17:58 2005 $B$G$"$k!#(B $B%"%$%N!<%IHV9f(B(i-node number)$B$H$O!"%*%Z%l!<%F%#%s%0!&%7%9%F%`$NFbIt$G(B $B;H$o$l$F$$$k%U%!%$%k$r6hJL$9$k$?$a$NHV9f$G$"$k!#$3$NHV9f$5$($o$+$l$P!"(B $B%*%Z%l!<%F%#%s%0!&%7%9%F%`$O%U%!%$%k$NB0@-$dFbMF$r%"%/%;%9$G$-$k!#%*%Z(B $B%l!<%F%#%s%0!&%7%9%F%`$K$H$C$F$O!"2DJQD9$NL>A0$h$j$b8GDjD9$N%"%$%N!<%I(B $BHV9f$NJ}$,07$$$d$9$$!#(B

    $B$3$3$G!"%b!<%I$,(B8$B?J?t$G(B 0100644 ($B#C8@8l$NJ8K!$G!"(B0$B$+$i;O$^$k?t$O!"(B8$B?J(B $B?t(B)$B$G$"$k$3$H$+$i!"%U%!%$%k$N7?!JIaDL$N%U%!%$%k$+%G%#%l%/%H%j$+$H$$$&(B $B>pJs!K$rD4$Y$k$3$H$,$G$-$k!#(B

    $B?^(B? Unix$B$N%U%!%$%k$NB0@-(B

    $B?^(B? Unix$B$N%U%!%$%k$NB0@-(B

    0100644$B$N>e0L#4%S%C%H!"$D$^$j!"(B0170000$B$H(B AND ($B#C8@8l$N$G$O!"(B &$B1i;;;R(B)$B$r$H$C$?7k2L$O(B 0100000 $B$H$J$k!#$3$NCM$O!"IaDL$N%U%!(B $B%$%k!J(Bregular file$B!K$r0UL#$9$k!#%G%#%l%/%H%j$N>l9g!"(B0040000 $B$H$J$k!#$3(B $B$l$i$N?t$O!"(B<sys/stat.h> (/usr/include/sys/stat.h)$B$GDj5A$5(B $B$l$F$$$k!#(B(Linux $B$G$O!"(B/usr/include/linux/stat.h $B$K$"$k(B)

    #define S_IFMT          0xF000  /* type of file */
    #define S_IFIFO         0x1000  /* fifo */
    #define S_IFCHR         0x2000  /* character special */
    #define S_IFDIR         0x4000  /* directory */
    #define S_IFBLK         0x6000  /* block special */
    #define S_IFREG         0x8000  /* regular */
    #define S_IFLNK         0xA000  /* symbolic link */
    #define S_IFSOCK        0xC000  /* socket */
    
    
    #define S_ISFIFO(mode)  ((mode&S_IFMT) == S_IFIFO)
    #define S_ISCHR(mode)   ((mode&S_IFMT) == S_IFCHR)
    #define S_ISDIR(mode)   ((mode&S_IFMT) == S_IFDIR)
    #define S_ISBLK(mode)   ((mode&S_IFMT) == S_IFBLK)
    #define S_ISREG(mode)   ((mode&S_IFMT) == S_IFREG)
    #define S_ISLNK(m)      (((m) & S_IFMT) == S_IFLNK)
    #define S_ISSOCK(m)     (((m) & S_IFMT) == S_IFSOCK)
    
    $B%W%m%0%i%`Cf$G$O!" struct stat buf ; stat( path, &buf ); switch( buf.st_mode & S_IFMT ) { case S_IFREG: $B%U%!%$%k$N;~$N=hM}(B; break; case S_IFDIR: ... $B%G%#%l%/%H%j$N;~$N=hM}(B; break; .... } $B$"$k$$$O!"(B<sys/stat.h> $B$K4^$^$l$F$$$k(B S_ISREG(), S_ISDIR() $B$H$$$&%^%/%m$rMQ$$$F!" struct stat buf ; stat( path, &buf ); if( S_ISREG(buf.st_mode) ) { $B%U%!%$%k$N;~$N=hM}(B; } else if( S_ISDIR(buf.st_mode) ) { $B%G%#%l%/%H%j$N;~$N=hM}(B; }

    $B%b!<%I$N2<0L#9%S%C%H!J>e$NNc$G$O!"(B8$B?J?t$G(B 644 $B!K$O!"5v2D$5$l$?%"%/%;%9(B $BJ}K!$rI=$7$F$$$k!#$=$N#9%S%C%H$O!"#3%S%C%H$E$D$K6h@Z$i$l$*$j!">e0L$+$i(B $B=jM-!J(Bothers$B!K$K5v2D!J(Bpermission$B!K(B $B$5$l$F$$$k%"%/%;%9J}<0$rI=$7$F$$$k!#=jM-

    $B3F#3%S%C%H$O

    ls -l 3$B%S%C%HCM(B $B%"%/%;%98"(B
    r 4 $BFI9~$_2DG=(B
    w 2 $B=q9~$_2DG=(B
    x 1 $Bl9g$O!"8!:w2DG=!K(B

    $B$3$N$h$&$K!"IaDL$N%U%!%$%k$H%G%#%l%/%H%j$G(B "x" $B$N0UL#$,0[$J$k!#(B

    $B%j%s%/$HL>A0(B

    $B%W%m%;%9$N%f!<%6B0@-(B

    $B%W%m%;%9$K$O!"B0@-$H$7$F(B UID $B$,IU$$$F$$$k!#$3$NB0@-$O!"%U%!%$%k$r(B open() $B$9$k;~$KFbItE*$K;H$o$l$k!#(B

    $B%W%m%;%9$N(B UID $BB0@-$rF@$k$K$O!"(Bgetuid() $B%7%9%F%`%3!<%k$rMQ$$$k!#(B $B%W%m%;%9$N(B GID $BB0@-$rF@$k$K$O!"(Bgetgid() $B%7%9%F%`%3!<%k$rMQ$$$k!#(B $B0J2<$N%W%m%0%i%`$O!"8=:_$N%W%m%;%9$N(B UID $B$H%f!<%6L>!"(B UID $B$H%f!<%6L>$r(B $BI=<($9$k$b$N$G$"$k!#(B

       1:	/*
       2:	        proc-uid-print.c -- $B8=:_$N%W%m%;%9$N(BUID$B$rI=<($9$k%W%m%0%i%`!#(B
       3:	        ~yas/syspro/proc/proc-uid-print.c
       4:	        Created on: 1998/05/18 23:20:16
       5:	*/
       6:	
       7:	#include <sys/types.h>  /* getuid(2) */
       8:	#include <unistd.h>     /* getuid(2) */
       9:	#include <pwd.h>        /* getpwuid(3) */
      10:	#include <grp.h>        /* getgrgid(3) */
      11:	
      12:	#if     0
      13:	
      14:	-------------------- /usr/include/bits/types.h: --------------------
      15:	...
      16:	typedef unsigned char __u_char;
      17:	typedef unsigned short __u_short;
      18:	typedef unsigned int __u_int;
      19:	typedef unsigned long __u_long;
      20:	...
      21:	typedef __u_int __uid_t;                /* Type of user identifications.  */
      22:	typedef __u_int __gid_t;                /* Type of group identifications.  */
      23:	...
      24:	
      25:	-------------------- /usr/include/sys/types.h: --------------------
      26:	#include <bits/types.h>
      27:	...
      28:	#ifndef __uid_t_defined
      29:	typedef __uid_t uid_t;
      30:	# define __uid_t_defined
      31:	#endif
      32:	...
      33:	#ifndef __gid_t_defined
      34:	typedef __gid_t gid_t;
      35:	# define __gid_t_defined
      36:	#endif
      37:	
      38:	-------------------- /usr/include/unistd.h: --------------------
      39:	/* Get the real user ID of the calling process.  */
      40:	extern __uid_t getuid (void) __THROW;
      41:	
      42:	#endif
      43:	
      44:	extern  char *uid2uname(uid_t uid);
      45:	extern  char *gid2gname(gid_t gid);
      46:	
      47:	main()
      48:	{
      49:	    uid_t uid ;
      50:	    gid_t gid ;
      51:	        uid = getuid();
      52:	        printf("uid==%u (%s)\n",uid,uid2uname(uid) );
      53:	        gid = getgid();
      54:	        printf("gid==%u (%s)\n",gid,gid2gname(gid) );
      55:	}
      56:	
      57:	char *
      58:	uid2uname(uid_t uid)
      59:	{
      60:	    struct passwd *pwd ;
      61:	        pwd = getpwuid( uid );
      62:	        if( pwd )
      63:	            return( pwd->pw_name );
      64:	        else
      65:	        {
      66:	             static char buf[100] ; /* must be static, bad for multithreading */
      67:	             snprintf(buf,sizeof(buf),"%d",uid );
      68:	             return( buf );
      69:	        }
      70:	}
      71:	
      72:	char *
      73:	gid2gname(gid_t gid)
      74:	{
      75:	    struct group *grp ;
      76:	        grp = getgrgid( gid );
      77:	        if( grp )
      78:	            return( grp->gr_name );
      79:	        else
      80:	        {
      81:	             static char buf[100] ; /* must be static, bad for multithreading */
      82:	             snprintf(buf,sizeof(buf),"%d",gid );
      83:	             return( buf );
      84:	        }
      85:	}
    
    uid_t $B$O!":G=*E*$K$O!"(Bunsigned int $B$H$7$FDj5A$5$l$F$$$k!#(Bunistd.h $B$N(B __ THROW $B$O!"#C!\!\8@8l$G;H$&;~$KM-8z$J$b$N$G$"$j!"#C8@8l$N%W%m%0%i%`$N>l(B $B9g$O!"6u$NDj5A$GCV$-49$($i$l!"%=!<%9!&%W%m%0%i%`$+$i$O>C$($F$k!#(B

    getuid() $B$O!"$=$N%W%m%;%9!J8=:_

    uid2uname() $B$O!"0z?t$GM?$($i$l$?(B UID $B$r!"I8=`%i%$%V%i%j4X?t(Bgetpwuid() $B$r;H$C$FJ8;zNs$KJQ49$9$k!#$3$N%i%$%V%i%j4X?t$O!"(Bstruct passwd $B$X$N%]%$(B $B%s%?$rJV$9!#$3$N9=B$BN$O!" struct passwd { char *pw_name; /* user name */ char *pw_passwd; /* user password */ uid_t pw_uid; /* user id */ gid_t pw_gid; /* group id */ char *pw_gecos; /* real name */ char *pw_dir; /* home directory */ char *pw_shell; /* shell program */ }; pw_name $B$K!"J8;zNs$N%f!<%6L>$,F~$C$F$$$kB>$K!"%Q%9%o!<%I!J%O%C%7%eCM!K(B $B$d%f!<%6$N%[!<%`!&%G%#%l%/%H%j$d%m%0%$%s!&%7%'%k$b4^$^$l$F$$$k!#(B

    $B%i%$%V%i%j4X?t(B getpwuid() $B$O!"(B/etc/passwd $B%U%!%$%k$d(B NIS (Network Information Service) $B$N%Q%9%o!<%I!&%G!<%?%Y!<%9$r0z$$$F!"$3$N9=B$BN$r(B $B:n$j>e$2$k!#(Bgetpwuid() $B$NB>$K!"(Bgetpwnam() $B$b!"$3$N9=B$BN$X$N%]%$%s%?$r(B $BJV$9!#(B

           struct passwd *getpwnam(const char * name);
           struct passwd *getpwuid(uid_t uid);
    
    uid2uname() $B$O!"(BUID $B$r!"BP1~$7$?%f!<%6L>!JJ8;zNs!K$KJQ49$9$k4X?t$G$"$k!#(B uid2uname() $B$O!"7k2L$r(B static $B$G@k8@$7$?%P%C%U%!$KJ]B8$7$FJV$7$F$$$k!#(B $B$3$NJ}K!$O!"8e$G(B free() $B$7$J$/$F$b$h$$$H$$$&0UL#$G$OJXMx$JJ}K!$@$,!"%^(B $B%k%A%9%l%C%I$N%W%m%0%i%`$G$O$h$/$J$$!#!J%^%k%A%9%l%C%I$K$D$$$F$O!"#33X(B $B4|$N%*%Z%l!<%F%#%s%0!&%7%9%F%`#I#I$K=P$F$/$k!#!K(B

    gid2gname() $B$O!"(Buid2uname() $B$HF1MM$K!"(BGID $B$r%0%k!<%WL>$KBP1~$7$?J8;zNs(B $B$KJQ49$9$k4X?t$G$"$k!#FbIt$G$O!"I8=`$N%i%$%V%i%j4X?t(B getgrgid() $B$r;H$C(B $B$F$$$k!#$3$l$O!"(Bstruct group $B$rJV$9!#>\$7$/$O!"(Bman getgrgid $B$r8+$J$5$$!#(B

    $B % cp ~yas/syspro/proc/proc-uid-print.c . [$B % make proc-uid-print [$B cc proc-uid-print.c -o proc-uid-print % ./proc-uid-print [$B uid==1013 (yas) gid==40 (lab) % [] $B:G=i$N9T$O!"3F<+0[$J$k$O$:$G$"$k!#(B

    $B%"%/%;%9@)8f$H$O(B

    $B%"%/%;%9@)8f(B(access control) $B$H$O!"!VZ$9$k$3$H$G$"$k!#(B

    $B?^(B? $B?^(B? $B%

    $B?^(B? $B%"%/%;%9@)8f$K$*$1$k

    Unix$B$K$*$1$k%"%/%;%9@)8f$H$O(B

    Unix$B$G$O!"%"%/%;%9@)8f$N
  • $B%U%!%$%k(B
    • $BFbMF$rFI$_=P$9(B
    • $BFbMF$r=q$-9~$`(B
    • $BFbMF$r%W%m%0%i%`$H;W$C$F $B%G%#%l%/%H%j$K$D$$$F!"$=$l0J2<$r8!:w$9$k(B
    • $BB0@-$rFI=P$9(B
    • $BB0@-$rJQ99$9$k(B
  • $B%W%m%;%9(B
    • $B%7%0%J%k$rAw$k(B
    • $B%G%P%C%/$NBP>]$H$9$k(B

    Unix$B$O!"%^%k%A%f!<%6$N%7%9%F%`$J$N$G!"%f!<%6#1?M$R$H$j$rG'<1$9$k$h$&$J(B $B%"%/%;%9@)8f$N;EAH$_$r;}$C$F$$$k!#$?$H$($P!"(BUnix $B$G$O!"6&F1%W%m%8%'%/(B $B%H$K4XO"$7$?%U%!%$%k$O!"B>$N%f!<%6$K$b8+$;$F$b$h$$$,!"8D?M$NEE;R%a!<%k(B $B$O!"B>$N?M$K$O8+$;$J$$$H$$$C$?@)8f$,$G$-$k!#(B

    $B$3$l$KBP$7$F!"8E$$%Q%=%3%sMQ$N#O#S(B(Windows 95/98/ME, MacOS 9$B0J2<(B) $B$G$O!"$3$N$h$&$JJ#?t$N%f!<%6$r<1JL$7$?%"%/%;%9@)8f$O!"$G$-$J$$!#(B Windows NT, Windows 2000, Windows XP, MacOS X $B$O!"2DG=$G$"$k!#(B

    $B%U%!%$%k$KBP$9$k%"%/%;%9@)8f(B

    UNIX$B$G$O!"%U%!%$%k$N!VFbMF!W$N%"%/%;%9@)8f$r
    $B%f!<%6(B
    $B%U%!%$%k$N(BUID($B=jM-$B%0%k!<%W(B
    $B%U%!%$%k$N(BGID$B$,!"%W%m%;%9$N(BGID$B$N%j%9%H$N$I$l$+$HF1$8(B
    $B$=$NB>(B
    $B>e$N#2$D$KEv$F$O$^$i$J$$;~(B $B$3$l$r$D$+$C$F!"%b!<%IB0@-$N2<0L#9%S%C%H$N$&$A!"$I$N#3%S%C%H$r;H$&$+$r(B $B7h$a$k!#$=$7$F!"$=$N%S%C%H$,#1$K$J$C$F$$$l$P!"$=$NA`:n$,5v$5$l$k!#(B

    $B%U%!%$%k$N!VFbMF!W$N%"%/%;%9#3CJ3,$G$"$k$,!"%U%!%$%k$N!VB0@-!W

    $B%f!<%6(B
    $B%U%!%$%k$N(BUID($B=jM- $B$=$l0J30(B
    $B%U%!%$%k$N(BUID($B=jM- $B%f!<%6$N8"8B$G$O!"%U%!%$%k$NB0@-!J%b!<%I!"%0%k!<%W!";~9o!K$rJQ99$9$k(B $B$3$H$,$G$-$k!#$=$l0J30$N8"(B $B8B$G$O!"B0@-$rFI$_=P$9$3$H$O$G$-$k$,!"JQ99$O0l@Z$G$-$J$$!#(B $B$D$^$j!"%U%!%$%k$NFbMF$,%"%/%;%9$G$-$J$/$F$b!"(Bls -l, stat(2) $B$G(B $BB0@-$rD4$Y$k$3$H$O$G$k!#(B

    $B%W%m%;%9$KBP$9$k%"%/%;%9@)8f(B

    $B%W%m%;%9$N%"%/%;%9@)8f$O!"
    $BF10l%f!<%6(B
    $BA`:nBP>]$N%W%m%;%9$,!"A`:n$9$k%W%m%;%9$N(BUID$B$H0lCW$7$F$$$k!#(B
    $B$=$l0J30(B
    $BA`:nBP>]$N%W%m%;%9$,!"A`:n$9$k%W%m%;%9$N(BUID$B$H0lCW$7$F$$$J$$!#(B $B%W%m%;%9$NA`:n$H$7$F$O!"%7%0%J%k$rAw$k$3$H$,$G$-$k$+$I$&$+(B (kill() $B%7%9%F%`%3!<%k(B) $B$H!"%G%P%C%,$G(B $B%G%P%C%0$9$k$3$H$,$G$-$k$H$+(B(ptrace() $B%7%9%F%`%3!<%k(B)$B!"%H%l!<%9$rD4$Y$k$3$H$,$G$-$k$+$J$I$,(B $B$"$k!#$=$l$i$NA`:n$O!"F10l%f!<%6$N>l9g(B $B5v$5$l!"$=$&$G$O$J$$>l9g$O!"5v$5$l$J$$!#(B

    $B%9!<%Q!<%f!<%6(B(root)

    umask$B$N1F6A(B

    $BN}=,LdBj(B

    $BN}=,LdBj(B(62) Java$B$K$h$k(Becho-client-udp$B$N

    echo-client-udp.c $B$r(B Java $B$G=q$-D>$7$J$5$$!#(B

    $B%R%s%H!'(BDatagramSocket() $B$r;H$&!#(B

    $BN}=,LdBj(B(63) Java$B$K$h$k(Becho-server-udp$B$N

    echo-server-udp.c $B$r(B Java $B$G=q$-D>$7$J$5$$!#(B

    $BN}=,LdBj(B(64) UDP/IP$B$GAw$l$k%G!<%?$NBg$-$5$N>e8B(B

    UDP/IP $B$G$O!"0lEY$KAw$k$3$H$,$G$-$k%G!<%?$NBg$-$5$K$K$O!"e$N@)8B(B $B$,IU$$$F$$$k!#$3$l$,$$$/$D$+$rD4$Y$k%W%m%0%i%`$r:n$j$J$5$$!#(B

    $BN}=,LdBj(B(65) udprelay

    UDP/IP $B$N%G!<%?$rCf7Q$9$k$h$&$J%W%m%0%i%`$r:n$j$J$5$$!#(B $BC1J}8~$@$1$G$J$/!"APJ}8~$GCf7Q$9$k$h$&$K$7$J$5$$!#(B

    $B$3$N$h$&$J%W%m%0%i%`$NNc$H$7$F!"(Budprelay $B$H8F$P$l$k%W%m%0%i%`$,$"$k!#(B

    $BN}=,LdBj(B(66) UDP/IP$B$G$N%"%/%;%9@)8f(B

    UDP/IP $B$N%5!<%P!"$^$?$O!"Cf7Q%W%m%0%i%`$G!"%/%i%$%"%s%H$N(B IP $B%"%I%l%9(B $B$K$h$C$F%"%/%;%9$r5v$7$?$j%(%i!<$rH/@8$5$;$?$j$7$J$5$$!#(B

    $BN}=,LdBj(B(67) UDP/IP$B$K$h$k%5!<%S%9$NMxMQ(B

    $B
    daytime (13, Daytime Protocol)
    rfc867.txt
    time (37, Time Protocol)
    rfc868.txt
    NTP (123, Network Time Protocol)
    rfc1305.tx
    DNS (53, Domain Name System)
    rfc1034.txt, rfc1035.txt $B$=$l$>$l$N%W%m%H%3%k$G$O!"
    daytime, time
    adonis1-adonis45, azalea1-azalea45, localhost
    NTP
    orchid-a
    DNS
    orchid-a, orchid-b

    $BN}=,LdBj(B(68) id$B%3%^%s%I(B

    id $B%3%^%s%I$H;w$?$h$&$JF0$-$r$9$k%3%^%s%I$r:n$j$J$5$$!#(Bid $B%3%^%s%I$O!"(B $B % id [$B uid=1013(yas) gid=40(lab) groups=40(lab),510(softadm),500(jikken3) % [] $B$3$3$G!"(Buid $B$O!"(Bgetuid()$B!"(B gid $B$O!"(Bgetgid()$B!"(Bgroups $B$O!"(Bgetgroups() $B%7(B $B%9%F%`%3!<%k$N7k2L$G$"$k!#(Bgetgroups() $B$G$O!"J#?t$N(B GID $B$,JV$5$l$k!#(B

    $BN}=,LdBj(B(69) ls-l$B%W%m%0%i%`(B

    stat() $B%7%9%F%`!&%3!<%k$rMQ$$$F(B ls -l filename $B$H;w$?$h$&$J7k2L$r=PNO(B $B$9$k%W%m%0%i%`$r:n$j$J$5$$!#$3$N%W%m%0%i%`$NL>A0$r(B myls-l $B$H$9$k!#(B

    ls -l $B$G$O!"#3$D$N;~9o$N$&$A!"$I$N;~9o$,I=<($5$l$F$$$k$N$+$rD4$Y$J$5$$!#(B $B$^$?!"B>$N#2$D$N;~9o$rI=<($5$;$kJ}K!$rD4$Y$J$5$$!#(B

    myls-l $B$N7k2L$NI=<(7A<0$O!"(Bls -l $B$H40A4$K0lCW$7$J$/$F$b$h$$!#$?$H$($P!"(B $B;~9o$NI=<($O!">e$N(B ystat.c $B$N7k2L$HF1$8$G$b$h$$!#%U%!%$%kL>$r@h$K!"(B $B;~9o$r8e$KI=<($7$F$b$h$$!#(B

    $B;~9o$N07$$$N2s(B $B$G>R2p$7$?(Blocaltime() $B$d(B strftime() $B%i%$%V%i%j4X?t$rMxMQ$9$k$H!";~9o$N(B $BI=<($r$h$j4JC1$K(B ls -l $B$NI=<($K6a$E$1$k$3$H$,$G$-$k!#(B

    uid (st_uid) $B$K$D$$$F$O!"(Bls -l $B$G$O!"%f!<%6L>!J%m%0%$%sL>!K$GI=<($5$l(B $B$k!#$3$N2]Bj$G$O!"%f!<%6$d%0%k!<%W$O!"?t;z$N$^$^I=<($7$F$b$h$$!#(B proc-uid-print.c $B$K$"$k(B uid2uname(), gid2gname() $B$rMxMQ$9$l$P!"(B $B?t;z$G$O$J$/J8;zNs$GI=<($9$k$3$H$,$G$-$k!#(B

    $B%W%m%0%i%`$N0z?t$H$J$k%U%!%$%k$N?t$O!"#18D$H$9$k!#J#?t$N%U%!%$%k$K$D$$(B $B$F!"(Bls -l $B$HF1MM$NI=<($r$9$k$h$&$K3HD%$7$F$b$h$$!#(B

    $BIaDL$N%U%!%$%k(B($B!V(B-$B!W(B)$B$H%G%#%l%/%H%j(B($B!V(Bd$B!W(B)$B$rI,$:07$($k$h$&$K$9$k!#$=$l(B $B0J30$N7?$N%U%!%$%k$K$D$$$F$O!"07$($J$/$F$b$h$$!#(B

    $B0z?t$H$7$F%G%#%l%/%H%j$NL>A0$,M?$($i$l$?>l9g$K$b!"%G%#%l%/%H%j$NFbMF$G(B $B$O$J$/%G%#%l%/%H%j<+?H$NB0@-$rI=<($9$k!#%7%s%\%j%C%/!&%j%s%/$K$OBP1~$7(B $B$J$/$F$b$h$$!#!J$h$C$F@53N$K$O!"(Bls -l filename $B$G$O$J$/!"(Bls -ldL filename $B$G$"$k!#!K(B

    $BM>M5$,$"$l$P!"(Blstat() $B$H(B readlink() $B$N!"#2$D$N%7%9%F%`!&%3!<%k$rMQ$$$F!"(B ls -l $B$HF1$8$h$&$K%7%s%\%j%C%/!&%j%s%/$NFbMF$rI=<($7$J$5$$!#(B

    $B%R%s%H!'(Bstruct stat $B$N(B st_mode $B$+$i(B rwxrwxrwx $B$NI=<($rF@$k$K$O!"$$$/$D(B $B$b$NJ}K!$,$"$k!#$?$H$($P!"#3%S%C%H$:$DI=<($9$k4X?t$r#32s7+$jJV$9J}K!$,(B $B$"$k!#(B

       print_rwx( st_mode$B$N(B8$B%S%C%HL\$+$i(B6$B%S%C%HL\$r
    
    $BFCDj$N%S%C%H$r

    $B$=$N30$K!"(BS_IRUSR, S_IWUSR $B$J$I$N%^%/%m$r;H$&J}K!$,$"$k!#(B

       if( mode & S_IRUSR )
          printf("r");
       else
          printf("-");
       if( mode & S_IWUSR )
          printf("w");
    ...
    
    $BMxMQ2DG=$J%^%/%m$K$D$$$F$O!"(B2 $B>O$N(B stat (man 2 stat) $B$r8+$J$5$$!#(B

    $BN}=,LdBj(B(70) chmod $B%W%m%0%i%`(B

    $B%U%!%$%k$N%b!<%I$rJQ99$9$k%3%^%s%I(B chmod $B$K;w$?%3%^%s%I$r:n$j$J$5$$!#(B
    % mychmod 755 filename [$B
    
    $B%b!<%I$O!"#8?J?t$GM?$($k$b$N$H$9$k!#0z?t$H$7$F$O!"#1$D$@$1$G$h$$!#(B

    $BN}=,LdBj(B(71) touch $B%W%m%0%i%`(B

    $B%U%!%$%k$N;~9o$rJQ99$9$k%3%^%s%I(B touch $B$K;w$?%3%^%s%I$r:n$j$J$5$$!#(B
    % mytouch filename [$B
    
    $B$3$N7k2L!"%U%!%$%k$N:G=*99?7;~9o$,8=:_$N;~9o$K$J$k!#(B

    $B%R%s%H!'(Btime(2) $B$H(B utime(2) $B$r;H$&!#(B

    $BN}=,LdBj(B(72) $B>r7o%3%T!<(B

    $B%U%!%$%k$,99?7$5$l$F$$$?;~$@$1%3%T!<$9$k$h$&$J%W%m%0%i%`$r:n$j$J$5$$!#(B

    $B%R%s%H!'(Bstat(2)$B%7%9%F%`%3!<%k$G!"%3%T!<85%U%!%$%k$H%3%T!<@h%U%!%$%k:G(B $B=*99?7;~9o$rD4$Y$k!#$b$7!"A0$BN}=,LdBj(B(73) $BB0@-$^$G4^$s$@%3%T!<(B cp -p (Preserve) $B$HF1$8$h$&$K!"%U%!%$%k$NFbMF$K2C$($F$$$/$D$+$NB0@-$r(B $BJ]B8$7$J$,$i%U%!%$%k$r%3%T!<$9$k%W%m%0%i%`$r$D$/$j$J$5$$!#(B

    $B$3$N2]Bj$G$O!"

  • $B:G=*%"%/%;%9;~9o(B atime
  • $B:G=*99?7;~9o(B mtime
  • $B%b!<%I(B UID (owner) $B$d(B GID $B$K$D$$$F$O!"J]B8$7$J$/$F$b$h$$!#(BUID $B$NJ]B8$O!"(B $B%9!<%Q!<%f!<%6(B$B$7$+$G$-$J$$!#(B $B%9!<%Q!<%f!<%6$,

    $B%3%T!<$9$k;~$K!"FbMF$r%3%T!<$7$?8e$K!"%3%T!<85$N%U%!%$%k$K(B stat() $B$r


    Last updated: 2005/06/25 00:49:04
    Yasushi Shinjo / <yas@is.tsukuba.ac.jp>