| 탐색 링크 건너뛰기 | |
| 인쇄 보기 종료 | |
|
Oracle Solaris 관리: Oracle Solaris Zones, Oracle Solaris 10 Zones 및 리소스 관리 Oracle Solaris 11 Information Library (한국어) |
흐름, 프로세스, 작업 및 네트워크 구성 요소에 대해 확장 계정을 활성화하는 방법
프로세스, 작업, 흐름 및 네트워크 관리 계정을 비활성화하는 방법
8. FSS(Fair Share Scheduler)(개요)
9. FSS(Fair Share Scheduler) 관리(작업)
10. 리소스 상한값 지원 데몬을 사용한 물리적 메모리 제어(개요)
18. 비전역 영역, 설치, 종료, 정지 및 복제 정보(개요)
19. 비전역 영역 설치, 부트, 종료, 정지, 제거 및 복제(작업)
22. 영역 마이그레이션 및 zonep2vchk 도구 정보
23. Oracle Solaris 시스템 마이그레이션 및 비전역 영역(작업) 마이그레이션
24. 영역이 설치된 Oracle Solaris 11 시스템의 자동 설치 및 패키지 정보
26. Oracle Solaris Zones 관리(작업)
28. 그 밖의 기타 Oracle Solaris Zones 문제 해결
29. Oracle Solaris 10 Zones 소개
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 exact 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