PXFGETGROUPS (L*X, M*X)

POSIX Subroutine: Gets supplementary group IDs.

Module

USE IFPOSIX

Syntax

CALL PXFGETGROUPS (igidsetsize,igrouplist,ngroups,ierror)

igidsetsize

(Input) INTEGER(4). The number of elements in the igrouplist array.

igrouplist

(Output) INTEGER(4). The array that has the returned supplementary group IDs.

ngroups

(Output) INTEGER(4). The total number of supplementary group IDs for the process.

ierror

(Output) INTEGER(4). The error status.

If successful, ierror is set to zero; otherwise, an error code.

The PXFGETGROUPS subroutine returns, up to size igidsetsize, the supplementary group IDs in array igrouplist. It is unspecified whether the effective group ID of the calling process is included in the returned list. If the size is zero, the list is not modified, but the total number of supplementary group IDs for the process is returned.

Example

program test5

use ifposix

implicit none

integer(4) number_of_groups, ierror, isize,i, igid

integer(4),allocatable,dimension(:):: igrouplist

integer(JHANDLE_SIZE) jgroup

! Get total number of groups in system

! call PXFGETGROUPS with 0

call PXFGETGROUPS(0, igrouplist, number_of_groups, ierror)

if(ierror.NE.0) STOP 'Error: first call of PXFGETGROUPS fails'

print *," The number of groups in system ", number_of_groups

! Get Group IDs

isize = number_of_groups

ALLOCATE( igrouplist(isize))

call PXFGETGROUPS(isize, igrouplist, number_of_groups, ierror)

if(ierror.NE.0) then

DEALLOCATE(igrouplist)

STOP 'Error: first call of PXFGETGROUPS fails'

end if

print *," Create an instance for structure 'group' "

call PXFSTRUCTCREATE("group",jgroup, ierror)

if(ierror.NE.0) then

DEALLOCATE(igrouplist)

STOP 'Error: PXFSTRUCTCREATE failed to create an instance of group'

end if

do i=1, number_of_groups

call PXFGETGRGID( igrouplist(i), jgroup, ierror)

if(ierror.NE.0) then

DEALLOCATE(igrouplist)

call PXFSTRUCTFREE(jgroup, ierror)

print *,'Error: PXFGETGRGID failed for i=',i," gid=", igrouplist(i)

STOP 'Abnormal termination'

end if

call PRINT_GROUP_INFO(jgroup)

end do

call PXFGETGID(igid,ierror)

if(ierror.NE.0) then

DEALLOCATE(igrouplist)

call PXFSTRUCTFREE(jgroup, ierror)

print *,'Error: PXFGETGID failed'

STOP 'Abnormal termination'

end if

call PXFGETGRGID( igid, jgroup, ierror)

if(ierror.NE.0) then

DEALLOCATE(igrouplist)

call PXFSTRUCTFREE(jgroup, ierror)

print *,"Error: PXFGETGRGID failed for gid=", igid

STOP 'Abnormal termination'

end if

call PRINT_GROUP_INFO(jgroup)

DEALLOCATE(igrouplist)

call PXFSTRUCTFREE(jgroup, ierror)

print *," Program will normal terminated"

call PXFEXIT(0)

end