OpenVMS Source-Code Demos

CHMOD_DEMO.C

//==============================================================================
// title  : HACK_C_CHMOD_100.C
// author : Neil Rieck
// created: 2011-08-31
// notes  : chmod.c (changes the protection bits of a file or directory)
//        : changing 3-bits with chmod affect 4-bits on OpenVMS
//==============================================================================
#define __NEW_STARLET	1				// enable new (strict) starlet for OpenVMS Alpha 7.0 and later
							// http://h71000.www7.hp.com/doc/82final/5841/5841pro_059.html
#include <stdio.h>					// c   - standard i/o
#include <string.h>					// c   - string stuff
#include <starlet.h>					// vms - system library
#include <ssdef.h>					// vms - system services definitions
#include <stat.h>					// vms - stat (for chmod)

int main ()						//
{	int		rc;				//
	char		fileTemp[255];			// longer for path + file on ODS5 volume
	unsigned short	prot_bits;			// see UNIX docs
	//
	//	define an expendible (junk) file for us to play with
	//
	strcpy(fileTemp, "neil.txt");			// <<< change file as required
	//
	//	Example Values (and what they will do to VMS files)
	//
	//	value		    vms file protection result
	//	=====		    ==========================
	//			    sys  own  grup wrld
	prot_bits =  1;		// (    ,    ,    ,  E )	  1
	prot_bits =  2;		// (    ,    ,    , W D)	  2 <<< setting 'd' also sets 'w'
	prot_bits =  3;		// (    ,    ,    , WED)	  3
	prot_bits =  4;		// (    ,    ,    ,R   )	  4
	prot_bits =  5;		// (    ,    ,    ,R E )	  5
	prot_bits =  6;		// (    ,    ,    ,RW D)	  6
	prot_bits =  7;		// (    ,    ,    ,RWED)	  7
				//  -------------------
	prot_bits =  8;		// (    ,    ,  E ,    )  1x8  =  8
	prot_bits = 16;		// (    ,    , W D,    )  2x8  = 16
	prot_bits = 24;		// (    ,    , WED,    )  3x8  = 24
	prot_bits = 32;		// (    ,    ,R   ,    )  4x8  = 32
				//			  5x8  = 40
				//			  6x8  = 48
	prot_bits = 56;		// (    ,    ,RWED,    )  7x8  = 56
	prot_bits = 63;		// (    ,    ,RWED,RWED)  8^2-1= 63
				//  -------------------
	prot_bits = 64;		// (  E ,  E ,    ,    )  8x8 =  64 <<< owner + system groups both set
	prot_bits =128;		// ( W D, W D,    ,    ) 16x8 = 128
	prot_bits =192;		// ( WED, WED,    ,    ) 24x8 = 192
	prot_bits =256;		// (R   ,R   ,    ,    ) 32x8 = 256
				//			 40x8 = 320
				//			 48x8 = 384
				//			 56x8 = 448
	prot_bits =511;		// (RWED,RWED,RWED,RWED) 8^3-1= 511
				//  -------------------
	prot_bits =512;		// (    ,    ,    ,    ) 8^3  = 512
	//----------------------------------------------------------------------
	// prototype:
	//	int chmod (const char *file_spec, mode_t mode);
	// see:
	//	http://h71000.www7.hp.com/doc/732final/5763/5763pro_022.html#index_x_625
	//
	//	returns:	0 = sucess
	//			-1 = fail
	//----------------------------------------------------------------------
	prot_bits =511;					// (RWED,RWED,RWED,RWED)
	rc = chmod( fileTemp, prot_bits );		//
	if (rc == -1)					//
	{    printf ("-e- wcsm_c_chmod: FAILED\n");	//
	}else{						//
	     printf ("-i- wcsm_c_chmod:SUCCEEDED\n");	//
	}						//
	return(1);					// VMS-i- (goes back to DCL)
}