Intel® Fortran Compiler 16.0 User and Reference Guide

PXFGETGROUPS (L*X, M*X)

POSIX Subroutine: Gets supplementary group IDs.

Module

USE IFPOSIX

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