| 탐색 링크 건너뛰기 | |
| 인쇄 보기 종료 | |
|   | Oracle Solaris 11.1 관리: Oracle Solaris 영역, Oracle Solaris 10 영역 및 리소스 관리 Oracle Solaris 11.1 Information Library (한국어) | 
플로우, 프로세스, 작업 및 네트워크 구성 요소에 대해 확장 계정을 활성화하는 방법
프로세스, 작업, 플로우 및 네트워크 관리 계정을 비활성화하는 방법
8. FSS(Fair Share Scheduler)(개요)
9. FSS(Fair Share Scheduler) 관리(작업)
10. 리소스 상한값 지원 데몬을 사용한 물리적 메모리 제어(개요)
18. 비전역 영역, 설치, 종료, 정지 및 복제 정보(개요)
19. 비전역 영역 설치, 부트, 종료, 정지, 제거 및 복제(작업)
22. 영역 마이그레이션 및 zonep2vchk 도구 정보
23. Oracle Solaris 시스템 마이그레이션 및 비전역 영역(작업) 마이그레이션
24. 영역이 설치된 Oracle Solaris 11.1 시스템의 자동 설치 및 패키지 정보
28. 그 밖의 기타 Oracle Solaris 영역 문제 해결
30. Oracle Solaris 10 시스템 액세스 및 아카이브 만들기
다음 코드를 사용하여 exacct 객체의 내용을 반복적으로 인쇄할 수 있습니다. 이 기능은 라이브러리에서 Sun::Solaris::Exacct::Object::dump() 기능으로 제공됩니다. 또한 이 기능은 ea_dump_object() 편의 기능을 통해서도 사용할 수 있습니다.
sub dump_object
     {
             my ($obj, $indent) = @_;
             my $istr = '  ' x $indent;
             #
             # Retrieve the catalog tag.  Because we are 
             # doing this in an array context, the
             # catalog tag will be returned as a (type, catalog, id) 
             # triplet, where each member of the triplet will behave as 
             # an integer or a string, depending on context.
             # If instead this next line provided a scalar context, e.g.
             #    my $cat  = $obj->catalog()->value();
             # then $cat would be set to the integer value of the 
             # catalog tag.
             #
             my @cat = $obj->catalog()->value();
             #
             # If the object is a plain item
             #
             if ($obj->type() == &EO_ITEM) {
                     #
                     # Note: The '%s' formats provide s string context, so
                     # the components of the catalog tag will be displayed
                     # as the symbolic values. If we changed the '%s'
                     # formats to '%d', the numeric value of the components
                     # would be displayed.
                     #
                     printf("%sITEM\n%s  Catalog = %s|%s|%s\n", 
                        $istr, $istr, @cat);
                     $indent++;
                     #
                     # Retrieve the value of the item.  If the item contains
                     # in turn a nested exacct object (i.e., an item or
                     # group),then the value method will return a reference
                     # to the appropriate sort of perl object
                     # (Exacct::Object::Item or Exacct::Object::Group).
                     # We could of course figure out that the item contained
                     # a nested item orgroup by examining the catalog tag in
                     # @cat and looking for a type of EXT_EXACCT_OBJECT or
                     # EXT_GROUP.
                     #
                     my $val = $obj->value();
                     if (ref($val)) {
                             # If it is a nested object, recurse to dump it.
                             dump_object($val, $indent);
                     } else {
                             # Otherwise it is just a 'plain' value, so
                             # display it.
                             printf("%s  Value = %s\n", $istr, $val);
                     }
             #
             # Otherwise we know we are dealing with a group.  Groups
             # represent contents as a perl list or array (depending on
             # context), so we can process the contents of the group
             # with a 'foreach' loop, which provides a list context.
             # In a list context the value method returns the content
             # of the group as a perl list, which is the quickest
             # mechanism, but doesn't allow the group to be modified.
             # If we wanted to modify the contents of the group we could
             # do so like this:
             #    my $grp = $obj->value();   # Returns an array reference
             #    $grp->[0] = $newitem;
             # but accessing the group elements this way is much slower.
             #
             } else {
                     printf("%sGROUP\n%s  Catalog = %s|%s|%s\n",
                         $istr, $istr, @cat);
                     $indent++;
                     # 'foreach' provides a list context.
                     foreach my $val ($obj->value()) {
                             dump_object($val, $indent);
                     }
                     printf("%sENDGROUP\n", $istr);
             }
     }
이 스크립트를 사용하여 새 그룹 레코드를 만들고 이를 /tmp/exacct라는 파일에 씁니다.
#!/usr/bin/perl
use strict;
use warnings;
use Sun::Solaris::Exacct qw(:EXACCT_ALL);
# Prototype list of catalog tags and values.
     my @items = (
             [ &EXT_STRING | &EXC_DEFAULT | &EXD_CREATOR      => "me"       ],
             [ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_PID     => $$         ],
             [ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_UID     => $<         ],
             [ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_GID     => $(         ],
             [ &EXT_STRING | &EXC_DEFAULT | &EXD_PROC_COMMAND => "/bin/rec" ],
     );
     # Create a new group catalog object.
     my $cat = ea_new_catalog(&EXT_GROUP | &EXC_DEFAULT | &EXD_NONE)
     # Create a new Group object and retrieve its data array.
     my $group = ea_new_group($cat);
     my $ary = $group->value();
     # Push the new Items onto the Group array.
     foreach my $v (@items) {
             push(@$ary, ea_new_item(ea_new_catalog($v->[0]), $v->[1]));
     }
     # Open the exacct file, write the record & close.
     my $f = ea_new_file('/tmp/exacct', &O_RDWR | &O_CREAT | &O_TRUNC)
        || die("create /tmp/exacct failed: ", ea_error_str(), "\n");
     $f->write($group);
     $f = undef;
다음 Perl 스크립트를 사용하여 exacct 파일의 내용을 인쇄할 수 있습니다.
#!/usr/bin/perl
     use strict;
     use warnings;
     use Sun::Solaris::Exacct qw(:EXACCT_ALL);
     die("Usage is dumpexacct <exacct file>\n") unless (@ARGV == 1);
     # Open the exacct file and display the header information.
     my $ef = ea_new_file($ARGV[0], &O_RDONLY) || die(error_str());
     printf("Creator:  %s\n", $ef->creator());
     printf("Hostname: %s\n\n", $ef->hostname());
     # Dump the file contents
     while (my $obj = $ef->get()) {
             ea_dump_object($obj);
     }
     # Report any errors
     if (ea_error() != EXR_OK && ea_error() != EXR_EOF)  {
             printf("\nERROR: %s\n", ea_error_str());
             exit(1);
     }
     exit(0);
이 출력 예는 새 그룹 레코드를 만들고 이를 파일에 쓰는 방법에서 만든 파일에 대해 Sun::Solaris::Exacct::Object->dump()를 실행하여 생성된 것입니다.
Creator:  root
Hostname: localhost
GROUP
       Catalog = EXT_GROUP|EXC_DEFAULT|EXD_NONE
       ITEM
         Catalog = EXT_STRING|EXC_DEFAULT|EXD_CREATOR
         Value = me
       ITEM
         Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_PID
         Value = 845523
       ITEM
         Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_UID
         Value = 37845
       ITEM
         Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_GID
         Value = 10
       ITEM
         Catalog = EXT_STRING|EXC_DEFAULT|EXD_PROC_COMMAND
         Value = /bin/rec
ENDGROUP