Document revision date: 15 July 2002 | |
Previous | Contents | Index |
%%%%%%%%%%% OPCOM 30-DEC-2001 13:44:40.37 Operator _NODE$LTA5: has been enabled, username HOEBLE |
The following example shows the message displayed on an operator terminal as a result of a request to display the status of that operator terminal:
%%%%%%%%%%% OPCOM 30-DEC-2001 12:11:10.48 Operator status for operator _NODE$OPA0: CENTRAL, PRINTER, TAPES, DISKS, DEVICES, CARDS, CLUSTER, SECURITY, OPER1, OPER2, OPER3, OPER4, OPER5, OPER6, OPER7, OPER8, OPER9, OPER10, OPER11, OPER12 |
The following example shows the message displayed on an operator terminal as a result of a user request:
%%%%%%%%%%% OPCOM 30-DEC-2001 12:57:32.25 Request 1285, from user ROSS on NODE_NAME Please mount device _NODE$DMA0: |
OPER privilege is required for the following functions:
In addition, the operator must have SECURITY privilege to affect security functions.
None
$ALLOC, $ASSIGN, $BRKTHRU, $BRKTHRUW, $CANCEL, $CREMBX, $DALLOC, $DASSGN, $DELMBX, $DEVICE_SCAN, $DISMOU, $GETDVI, $GETDVIW, $GETMSG, $GETQUI, $GETQUIW, $INIT_VOL, $MOUNT, $PUTMSG, $QIO, $QIOW, $SNDERR, $SNDJBC, $SNDJBCW
SS$_NORMAL The service completed successfully. SS$_ACCVIO The message buffer or buffer descriptor cannot be read by the caller. SS$_BADPARAM The specified message has a length of 0 or has more than 986 bytes. SS$_DEVNOTMBX The channel specified is not assigned to a mailbox. SS$_INSFMEM The service was called from kernel mode or the system dynamic memory is insufficient for completing the service. SS$_IVCHAN You specified an invalid channel number. An invalid channel number is one that is 0 or a number larger than the number of channels available. SS$_MBFULL The mailbox used to support communication is full. Retry at a later time. OPC$_NOPERATOR The service completed successfully; the Operator Communications Manager (OPCOM) is not running and the message will not be sent. Note that OPC$_NOPERATOR is a success status and must be tested for explicitly. SS$_NOPRIV The process does not have the privilege to reply to or cancel a user's request; the process does not have read/write access to the specified mailbox; or the channel was assigned from a more privileged access mode.
OPC$_BLANKTAPE The service completed successfully; the operator responded with the DCL command REPLY/BLANK_TAPE=n. OPC$_INITAPE The service completed successfully; the operator responded with the DCL command REPLY/INITIALIZE_TAPE=n. OPC$_NOPERATOR The service completed successfully; no operator terminal was enabled to receive the message. OPC$_RQSTCMPLTE The service completed successfully; the operator completed the request. OPC$_RQSTPEND The service completed successfully; the operator will perform the request when possible. OPC$_RQSTABORT The operator could not satisfy the request. OPC$_RQSTCAN The caller canceled the request.
#1 |
---|
#include <ssdef.h> #include <opcdef.h> #include <string.h> #include <descrip.h> #include <starlet.h> #include <lib$routines.h> char input_buffer[256]; /* Input buffer, if needed */ /* VMS descriptors: */ $DESCRIPTOR(input_desc, input_buffer); $DESCRIPTOR(prompt_desc, "Request> "); struct dsc$descriptor req_desc; main(int argc, char *argv[]) { int status, /* Status of system calls */ length = 0; /* Length of message text */ struct OPC request; /* Request message buffer */ /* Check for too many arguments on command line */ if (argc > 2) return (SS$_OVRMAXARG); /* See if request string present on command line... */ if (argc > 1) { /* It is. Compute length and copy pointer */ length = strlen(argv[1]); input_desc.dsc$a_pointer = argv[1]; } /* If no message present, prompt user for message text */ while (length == 0) { status = lib$get_input(&input_desc, &prompt_desc, &length); if (status != SS$_NORMAL) return (status); }; if (length > 128) /* Limit message length */ length = 128; /* to 128 characters */ /* Set up request buffer... */ request.opc$b_ms_type = OPC$_RQ_RQST; request.opc$b_ms_target = OPC$M_NM_CENTRL; request.opc$l_ms_rqstid = 0; memcpy(&request.opc$l_ms_text, input_desc.dsc$a_pointer, length); /* Set up request buffer descriptor and send message */ req_desc.dsc$w_length = length + 8; req_desc.dsc$a_pointer = (char *) &request; return (sys$sndopr(&req_desc, 0)); } |
This example allows you to build an operator request and send the request to the operator.
#2 |
---|
IMPLICIT NONE ! Symbol definitions INCLUDE '($DVIDEF)' INCLUDE '($OPCDEF)' ! Structures for SNDOPR STRUCTURE /MESSAGE/ UNION MAP BYTE TYPE, 2 ENABLE(3) INTEGER*4 MASK INTEGER*2 OUNIT CHARACTER*14 ONAME END MAP MAP CHARACTER*24 STRING END MAP END UNION END STRUCTURE RECORD /MESSAGE/ MSGBUF ! Length of MSGBUF.ONAME INTEGER*4 ONAME_LEN ! Status and routines INTEGER*4 STATUS, 2 LIB$GETDVI, 2 SYS$SNDOPR ! Type MSGBUF.TYPE = OPC$_RQ_TERME ! Enable MSGBUF.ENABLE(1) = 1 ! Operator type MSGBUF.MASK = OPC$M_NM_OPER1 ! Terminal unit number STATUS = LIB$GETDVI (DVI$_UNIT, 2 , 2 'SYS$OUTPUT', 2 MSGBUF.OUNIT,,) IF (.NOT. STATUS) CALL LIB$SIGNAL (%VAL(STATUS)) ! Terminal name STATUS = LIB$GETDVI (DVI$_FULLDEVNAM, 2 , 2 'SYS$OUTPUT',, 2 MSGBUF.ONAME, 2 ONAME_LEN) IF (.NOT. STATUS) CALL LIB$SIGNAL (%VAL(STATUS)) ! Remove unit number from ONAME and set up counted string ONAME_LEN = ONAME_LEN - 3 MSGBUF.ONAME(2:ONAME_LEN+1) = MSGBUF.ONAME(1:ONAME_LEN) MSGBUF.ONAME(1:1) = CHAR(ONAME_LEN) ! Call $SNDOPR STATUS = SYS$SNDOPR (MSGBUF.STRING,) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) END |
This Compaq Fortran for OpenVMS program enables the current terminal to receive OPER1 operator messages.
The Space service lets you space (skip) a tape file forward or backward a specified number of blocks.Refer to the OpenVMS Record Management Services Reference Manual for additional information about this service.
On Alpha systems, initializes user image alignment fault reporting.
SYS$START_ALIGN_FAULT_REPORT report_method ,report_buffer ,buffer_length
int sys$start_align_fault_report (int report_method, void *report_buffer, int buffer_length);
report_method
OpenVMS usage: longword_signed type: longword (signed) access: read mechanism: by value
Method by which image alignment faults are to be reported.The following table shows valid values for the report_method argument:
Value Meaning AFR$C_BUFFERED Alignment fault PCs and fault addresses are saved in a user-supplied buffer. AFR$C_EXCEPTION Alignment faults are elevated to user mode exceptions. report_buffer
OpenVMS usage: address type: longword (unsigned) access: read mechanism: by reference
The 32-bit address of the buffer into which to write the fault data. The report_buffer argument is needed only if the value of the report_method argument is AFR$C_BUFFERED.buffer_length
OpenVMS usage: byte count type: longword (signed) access: read mechanism: by value
Length of the buffer specified in the report_buffer argument.The buffer must have a minimum size of AFR$K_USER_LENGTH + 32. However, a larger buffer allows for more information to be collected.
The Start Alignment Fault Reporting service initializes user image alignment fault reporting.The $START_ALIGN_FAULT_REPORT service allows the user to gather alignment fault data for one image. Reporting is enabled for the life of the image. When the image terminates, the alignment fault reporting is disabled.
User alignment fault data can be written to a buffer or broadcast as an informational exception message.
If the AFR$C_BUFFERED value is given in the report_method buffer, alignment fault PCs and fault addresses are saved in a user-supplied buffer.
The following diagram illustrates the format in which user alignment fault data is stored in the buffer:
If the AFR$C_EXCEPTION value is given in the report_method argument, alignment faults are elevated to user mode exceptions. These exceptions can be trapped in a handler; otherwise, an informational exception message might be broadcast and the program continues to execute.
None
None
$GET_ALIGN_FAULT_DATA, $GET_SYS_ALIGN_FAULT_DATA, $INIT_SYS_ALIGN_FAULT_REPORT, $PERM_DIS_ALIGN_FAULT_REPORT, $PERM_REPORT_ALIGN_FAULT, $STOP_ALIGN_FAULT_REPORT, $STOP_SYS_ALIGN_FAULT_REPORT
SS$_NORMAL The service completed successfully. SS$_ACCVIO The buffer specified in the report_buffer argument is not accessible. SS$_AFR_ENABLED The service has already been called for this image. SS$_ARG_GTR_32_BITS The report buffer's virtual address lies in 64-bit virtual address space. SS$_ALIGN The buffer specified in the report_buffer argument is not quadword aligned. SS$_BADPARAM The buffer size is smaller than that defined by the AFR$K_USER_LENGTH + 32 symbol.
#include <afrdef> #include <stdio> #include <ssdef> #define USER_BUFFER_ITEMS 10 #define GET_BUFFER_SIZE USER_BUFFER_ITEMS*AFR$K_USER_LENGTH #define SAVE_BUFFER_SIZE 128+64 #define fault_pc afr$l_fault_pc_l #define fault_va afr$l_fault_va_l static int usr_buff_len; static char *usr_buff; static int rep_method; void cause_af() { int addr; int *ptr; int arr[2]; addr = (int) &arr[0]; ptr = (int *) ++addr; *ptr = 1; /* cause alignment fault */ } main() { int i; char get_buffer[GET_BUFFER_SIZE]; struct afrdef *data_item; int offset; int status; int return_size; rep_method = AFR$C_BUFFERED; usr_buff_len = SAVE_BUFFER_SIZE; usr_buff = (char *)malloc (usr_buff_len); if(( status = sys$start_align_fault_report(rep_method, usr_buff, usr_buff_len)) != SS$_NORMAL) return(status); for (i=0;i<USER_BUFFER_ITEMS;i++) cause_af(); while (((status = sys$get_align_fault_data (get_buffer, GET_BUFFER_SIZE, &return_size)) > 0) && (return_size > 0)) { /* got some data, print it */ offset = 0; while (offset < return_size) { data_item = (struct afrdef *)(&get_buffer[offset]); printf ("Alignment fault at PC = %8.8X, VA = %8.8X\n", data_item->fault_pc, data_item->fault_va); offset += AFR$K_USER_LENGTH; } } return (status); } |
This example shows how to use the $START_ALIGN_FAULT_REPORT service to initialize user image alignment fault reporting on Alpha systems.
Adds a new branch to a transaction.
SYS$START_BRANCH [efn] ,[flags] ,iosb ,[astadr] ,[astprm] ,tid ,tm_name ,bid [,[timout], [acmode], [tx_class]]
int sys$start_branch (unsigned int efn, unsigned int flags, struct _iosb *iosb, void (*astadr)(__unknown_params), int astprm, unsigned int tid [4], void *tm_name, unsigned int bid [4],...);
efn
OpenVMS usage: ef_number type: longword (unsigned) access: read only mechanism: by value
Number of the event flag that is set when the service completes. If this argument is omitted, event flag 0 is used.flags
OpenVMS usage: mask_longword type: longword (unsigned) access: read only mechanism: by value
Flags specifying options for the service. The flags argument is a longword bit mask in which each bit corresponds to an option flag. The $DDTMDEF macro defines symbolic names for these option flags, described in Table SYS-56. All undefined bits must be 0. If this argument is omitted, no flags are used.
Table SYS-56 $START_BRANCH Option Flags Flag Name Description DDTM$M_BRANCH_UNSYNCHED Specifies that the new branch is unsynchronized. If this flag is clear, the new branch is synchronized.
DDTM$M_NONDEFAULT Set this flag if you do not want the transaction to be the default transaction of the calling process. If this flag is clear, the transaction becomes the default transaction of the calling process. An error is returned if this flag is clear and the calling process has an current default transaction.
DDTM$M_SYNC Specifies successful synchronous completion by returning SS$_SYNCH. When SS$_SYNCH is returned, the AST routine is not called, the event flag is not set, and the I/O status block is not filled in. iosb
OpenVMS usage: io_status_block type: quadword (unsigned) access: write only mechanism: by reference
The I/O status block in which the completion status of the service is returned as a condition value. See the Condition Values Returned section.The following diagram shows the structure of the I/O status block:
OpenVMS usage: | ast_procedure |
type: | procedure entry mask |
access: | call without stack unwinding |
mechanism: | by reference |
OpenVMS usage: | user_arg |
type: | longword (unsigned) |
access: | read only |
mechanism: | by value |
OpenVMS usage: | trans_id |
type: | octaword (unsigned) |
access: | read only |
mechanism: | by reference |
OpenVMS usage: | char_string |
type: | character-coded text string |
access: | read only |
mechanism: | by descriptor--fixed-length string descriptor |
To ensure smooth operation in a mixed-network environment, refer to the chapter entitled Managing DECdtm Services in the OpenVMS System Manager's Manual, for information on defining node names.
OpenVMS usage: | branch_id |
type: | octaword (unsigned) |
access: | read only |
mechanism: | by reference |
An BID value of zero is invalid.
OpenVMS usage: | date_time |
type: | quadword (unsigned) |
access: | read only |
mechanism: | by reference |
OpenVMS usage: | access_mode |
type: | longword (unsigned) |
access: | read only |
mechanism: | by value |
This argument only influences the access mode of the first branch in this process. Subsequent branches have the same access mode as the first. The access mode of the new branch is the least privileged of:
Note that if a branch already exists in this process, then neither the access mode of the caller nor the access mode specified by the acmode argument may be less privileged than that branch.
The default value of this argument is the access mode of the caller.
OpenVMS usage: | char_string |
type: | character-coded text string |
access: | read only |
mechanism: | by descriptor--fixed-length string descriptor |
This argument is ignored if the transaction already has a transaction class on the local node.
This string must be no longer than 31 characters.
The $START_BRANCH system service:
- Adds a new branch running in the calling process to the specified transaction.
- Adds the local DECdtm transaction manager to the specified transaction if the local DECdtm transaction manager is not already a participant in that transaction.
- Sets the default transaction of the calling process to the new transaction, if the DDTM$M_NONDEFAULT flag is clear and the process does not have a default transaction.
- Delivers a transaction started event to each RMI in the calling process that meets both of the following conditions:
- Requested Transaction Started events for the corresponding transaction type (default or non-default)
- Has an access mode that is the same as or more privileged than that specified in this call to $START_BRANCH.
The new branch should have been previously authorized. Authorization is provided either by a matching call to $JOIN_RM with the DDTM$M_COORDINATOR flag set or by a matching call to $ADD_BRANCH. Two calls, one to $ADD_BRANCH and one to $START_BRANCH or one to $JOIN_RM and one to $START_BRANCH, are said to be matching when the following conditions are true:
- The same TID values are passed to both calls.
- The BID returned by the call to $ADD_BRANCH or $JOIN_RM is the same as that passed to the call to $START_BRANCH.
- The call to $START_BRANCH is made on the node identified by the tm_name argument passed to the call to $ADD_BRANCH or on the node on which the call to $JOIN_RM was made.
- The call to $ADD_BRANCH or $JOIN_RM is made on the node identified by the tm_name argument passed to the call to $START_BRANCH.
$START_BRANCH does not check that there has been a matching call to $ADD_BRANCH or $JOIN_RM unless the tm_name argument passed to $START_BRANCH specifies the local node.
Note
The atomicity of the transaction is not guaranteed if there is a call to $START_BRANCH that does not have a matching call to $ADD_BRANCH or $JOIN_RM.Preconditions for the successful completion of $START_BRANCH are:
- The local node must have a DECdtm transaction log.
- The TP_SERVER process must be running on the local node.
- There must not have been a successful call to $START_BRANCH on the local node that passed the specified BID.
- If the tm_name argument specifies the local node, there must have been a matching call to $ADD_BRANCH or $JOIN_RM on the local node.
- If the DDTM$M_NONDEFAULT flag is clear, the calling process must not have an unended default transaction.
- If this process already contains a branch of this transaction, then the access mode of the caller must be the same as or more privileged than the access mode of that branch.
$START_BRANCH may fail because:
- Preconditions were not met.
- An abort event occurred for the transaction.
- A call to $END_TRANS to end the transaction is in progress and it is too late to add a new branch to the transaction.
- The DDTM$M_NONDEFAULT flag was clear and a call to $SET_DEFAULT_TRANS by the calling process is in progress.
When $START_BRANCH completes successfully:
- A new branch running in the calling process has been added to the transaction.
- All Transaction Started events reported to RMIs in the calling process have been acknowledged.
- If the DDTM$M_NONDEFAULT flag was clear, the transaction is the default transaction of the calling process.
A branch may:
- Invoke resource manager operations, explicitly passing the TID.
- Invoke resource manager operations without specifying the TID, if the transaction is the default transaction of the calling process, and the resource manager supports default transactions.
- Call $ADD_BRANCH to authorize another branch to be added to the transaction.
Previous Next Contents Index
privacy and legal statement 4527PRO_111.HTML