addprojdb 서브루틴

용도

지정된 프로젝트 데이터베이스에 프로젝트 정의를 추가합니다.

라이브러리

libaacct.a 라이브러리.

구문

<sys/aacct.h>

addprojdb(void *handle, struct project *project, char *comment)

설명

Addprojdb 서브루틴은 구조 프로젝트 변수에 저장된 프로젝트 정의를 핸들 매개변수로 명명된 프로젝트 데이터베이스에 추가합니다. 이 서브루틴을 호출하기 전에 프로젝트 데이터베이스를 초기화해야 합니다. 이를 위해 projdballoc 서브루틴이 제공됩니다. 이 루틴은 제공된 프로젝트 정의가 이미 존재하는지 확인합니다. 존재하는 경우 addprojdb 서브루틴은 errno를 EEXIST로 설정하고 -1'을 반환합니다.

Addprojdb 서브루틴은 입력 프로젝트 번호의 유효성을 검사하여 예상 범위인 0x00000001 - 0x00ffffff 내에 있는지 확인하고 프로젝트 이름이 POSIX 영숫자 문자열인지 확인합니다. 잘못된 입력이 발견되면 addprojdb 서브루틴은 errno를 EINVAL로 설정하고 ' -1'을 반환합니다.

사용자에게 프로젝트 데이터베이스에 항목을 추가할 권한이 없는 경우 addprojdb 서브루틴은 errno를 EACCES로 설정하고 ' -1'을 반환합니다.

프로젝트 데이터베이스와 연결된 내부 상태(즉, 현재 프로젝트)가 있습니다. 프로젝트 데이터베이스가 초기화되면 현재 프로젝트가 데이터베이스의 첫 번째 프로젝트가 됩니다. Addprojdb 서브루틴은 지정된 프로젝트를 데이터베이스 끝에 추가합니다. 현재 프로젝트 할당을 데이터베이스의 다음 프로젝트, 즉 프로젝트 데이터 베이스의 끝으로 전진시킵니다. 이 시점에서는 추가 프로젝트 정의가 없기 때문에 getnextprojdb 서브루틴 호출이 실패합니다. 방금 추가한 프로젝트 정의를 읽으려면 getprojdb 하위 루틴을 사용합니다. 다른 프로젝트를 읽으려면 먼저 getfirstprojdb 서브루틴을 호출하여 내부의 현재 프로젝트 할당을 재설정하여 후속 읽기를 수행할 수 있도록 합니다.

프로젝트 데이터베이스에 추가되는 레코드의 형식은 다음과 같습니다:
ProjectName:ProjectNumber:AggregationStatus:Comment::
예:
Biology:4756:no:Project Created by projctl command::

매개변수

항목 설명
핸들(handle) 프로젝트 데이터베이스 핸들에 대한 포인터
project 추가할 프로젝트의 정의를 담고 있는 프로젝트 구조에 대한 포인터입니다
주석 프로젝트에 대한 코멘트가 포함된 문자열에 대한 포인터입니다

보안

권한이 있는 사용자에게만 해당됩니다. 사용자에게 CAP_AACCT 기능을 부여하여 루트가 아닌 사용자에게 권한을 확장할 수 있습니다.

리턴 값

항목 설명
0 성공
-1 실패

오류 코드

항목 설명
EINVAL 프로젝트 이름 또는 번호가 잘못되었거나 전달된 포인터가 NULL입니다.
EEXIST 프로젝트 정의가 이미 존재합니다.
EPERM 허용이 거부되었습니다. 사용자는 권한이 있는 사용자가 아닙니다.