scf_transaction_create(3scf) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

scf_transaction_create(3scf)

Service Configuration Facility Library Functions
                                                  scf_transaction_create(3SCF)



NAME
       scf_transaction_create,  scf_transaction_handle, scf_transaction_reset,
       scf_transaction_reset_all,    scf_transaction_destroy,     scf_transac‐
       tion_destroy_children,   scf_transaction_start,   scf_transaction_prop‐
       erty_delete,    scf_transaction_property_new,     scf_transaction_prop‐
       erty_change, scf_transaction_property_change_type, scf_transaction_com‐
       mit - create and manipulate transaction in  the  Service  Configuration
       Facility

SYNOPSIS
       cc [ flag... ] file... -lscf [ library... ]
       #include <libscf.h>

       scf_transaction_t *scf_transaction_create(scf_handle_t *handle);


       scf_handle_t *scf_transaction_handle(scf_transaction_t *tran);


       void scf_transaction_reset(scf_transaction_t *tran);


       void scf_transaction_reset_all(scf_transaction_t *tran);


       void scf_transaction_destroy(scf_transaction_t *tran);


       void scf_transaction_destroy_children(scf_transaction_t *tran);


       int scf_transaction_start(scf_transaction_t *tran,
            scf_propertygroup_t *pg);


       int scf_transaction_property_delete(scf_transaction_t *tran,
            scf_transaction_entry_t *entry, const char *prop_name);


       int scf_transaction_property_new(scf_transaction_t *tran,
            scf_transaction_entry_t *entry, const char *prop_name,
            scf_type_t type);


       int scf_transaction_property_change(scf_transaction_t *tran,
            scf_transaction_entry_t *entry, const char *prop_name,
            scf_type_t type);


       int scf_transaction_property_change_type(
            scf_transaction_t *tran, scf_transaction_entry_t *entry,
            const char *prop_name, scf_type_t type);


       int scf_transaction_commit(scf_transaction_t *tran);

DESCRIPTION
       Transactions  are  the mechanism for changing property groups. They act
       atomically, whereby either all of the updates occur or none of them do.
       An scf_transaction_t is always in one of the following states:

       reset        The  initial  state.  A  successful return of scf_transac‐
                    tion_start() moves the transaction to the started state.


       started      The transaction  has  started.  The  scf_transaction_prop‐
                    erty_delete(),  scf_transaction_property_new(), scf_trans‐
                    action_property_change(),    and     scf_transaction_prop‐
                    erty_change_type() functions can be used to set up changes
                    to properties. The scf_transaction_reset() and  scf_trans‐
                    action_reset_all() functions return the transaction to the
                    reset state.


       committed    A call to scf_transaction_commit() (whether or not  it  is
                    successful)  moves the transaction to the committed state.
                    Modifying, resetting, or destroying the entries and values
                    associated  with a transaction will move it to the invalid
                    state.


       invalid      The     scf_transaction_reset()      and      scf_transac‐
                    tion_reset_all()  functions  return the transaction to the
                    reset state.



       The scf_transaction_create()  function  allocates  and  initializes  an
       scf_transaction_t  bound to handle. The scf_transaction_destroy() func‐
       tion resets, destroys, and frees tran. If there are any entries associ‐
       ated  with  the  transaction,  scf_transaction_destroy() also effects a
       call to scf_transaction_reset(). The scf_transaction_destroy_children()
       function  resets, destroys, and frees all entries and values associated
       the transaction. The scf_error() function is not modified by this call.


       The scf_transaction_handle() function gets the handle to which tran  is
       bound.


       The  scf_transaction_start() function sets up the transaction to modify
       the property group to which pg is set. The time reference  used  by  pg
       becomes  the  basis  of  the  transaction. The transaction fails if the
       property group has been modified since the last update  of  pg  at  the
       time when scf_transaction_commit() is called.


       The  scf_transaction_property_delete(), scf_transaction_property_new(),
       scf_transaction_property_change(),      and       scf_transaction_prop‐
       erty_change_type()  functions add a new transaction entry to the trans‐
       action. Each property  the  transaction  affects  must  have  a  unique
       scf_transaction_entry_t. Each scf_transaction_entry_t can be associated
       with only a single transaction at a time. These functions all  fail  if
       the  transaction  is not in the started state, prop_name is not a valid
       property name, or the entry is already associated with the  transaction
       at tran. If the entry is being associated with a transaction after hav‐
       ing been associated with another transaction, the original  transaction
       is  invalidated,  while the entry is reassociated with the new transac‐
       tion. These functions affect commit and failure as follows:

       scf_transaction_property_delete()

           This function deletes the property prop_name in the property group.
           It  fails  if  prop_name  does  not name a property in the property
           group.


       scf_transaction_property_new()

           This function adds a new property prop_name to the  property  group
           with  a  value  list  of  type type. It fails if prop_name names an
           existing property in the property group.


       scf_transaction_property_change()

           This function changes the  value  list  for  an  existing  property
           prop_name  in  the  property  group. It fails if prop_name does not
           name an existing property in the property group or names an  exist‐
           ing property with a different type.


       scf_transaction_property_change_type()

           This function changes the value list and type for an existing prop‐
           erty prop_name in the property group. It fails  if  prop_name  does
           not name an existing property in the property group.



       If  the function call is successful, entry remains active in the trans‐
       action  until  scf_transaction_destroy(),  scf_transaction_reset(),  or
       scf_transaction_reset_all()  is  called.  The scf_entry_add_value(3SCF)
       manual page provides information for setting  up  the  value  list  for
       entries that are not associated with scf_transaction_property_delete().
       Resetting or destroying an entry or value active in a transaction  will
       move it into the invalid state.


       The scf_transaction_commit() function attempts to commit tran.


       The  scf_transaction_reset()  function  returns  the transaction to the
       reset state and releases all  of  the  transaction  entries  that  were
       added.


       The scf_transaction_reset_all() function returns the transaction to the
       reset state,  releases  all  of  the  transaction  entries,  and  calls
       scf_value_reset(3SCF) on all values associated with the entries.

RETURN VALUES
       Upon  successful  completion,  scf_transaction_create()  returns  a new
       scf_transaction_t. Otherwise, it returns NULL.


       Upon successful completion, scf_transaction_handle() returns the handle
       associated with the transaction. Otherwise, it returns NULL.


       Upon   successful   completion,  scf_transaction_start(),  scf_transac‐
       tion_property_delete(),  scf_transaction_property_new(),   scf_transac‐
       tion_property_change(),    and   scf_transaction_property_change_type()
       return 0. Otherwise, they return −1.


       The scf_transaction_commit() function returns 1 upon successful commit,
       0  if the property group set in scf_transaction_start() is not the most
       recent, and -1 on failure.

ERRORS
       The scf_transaction_create() function will fail if:

       SCF_ERROR_INVALID_ARGUMENT    The value of the handle argument is NULL.


       SCF_ERROR_NO_MEMORY           There is not enough memory to allocate an
                                     scf_transaction_t.


       SCF_ERROR_NO_RESOURCES        The   server   does   not  have  adequate
                                     resources for a new transaction handle.



       The scf_transaction_handle() function will fail if:

       SCF_ERROR_HANDLE_DESTROYED    The handle associated with tran has  been
                                     destroyed.



       The scf_transaction_start() function will fail if:

       SCF_ERROR_BACKEND_ACCESS

           The repository backend refused the modification.


       SCF_ERROR_BACKEND_READONLY

           The  repository  backend  refused  modification because it is read-
           only.


       SCF_ERROR_CONNECTION_BROKEN

           The connection to the repository was lost.


       SCF_ERROR_DELETED

           The property group has been deleted.


       SCF_ERROR_HANDLE_MISMATCH

           The transaction and property group are not derived  from  the  same
           handle.


       SCF_ERROR_IN_USE

           The  transaction  is  not  in  the  reset  state.  The scf_transac‐
           tion_reset() and scf_transaction_reset_all() functions can be  used
           to return the transaction to the reset state.


       SCF_ERROR_NO_RESOURCES

           The server does not have the resources to complete the request.


       SCF_ERROR_NOT_BOUND

           The handle was never bound or has been unbound.


       SCF_ERROR_NOT_SET

           The property group specified by pg is not set.


       SCF_ERROR_PERMISSION_DENIED

           The user does not have sufficient privileges to modify the property
           group.



       The scf_transaction_property_delete(),  scf_transaction_property_new(),
       scf_transaction_property_change(),       and      scf_transaction_prop‐
       erty_change_type() functions will fail if:

       SCF_ERROR_BACKEND_ACCESS

           The storage mechanism that the repository  server  (svc.configd(8))
           chose for the operation denied access.


       SCF_ERROR_CONNECTION_BROKEN

           The connection to the repository was lost.


       SCF_ERROR_DELETED

           The property group the transaction is changing has been deleted.


       SCF_ERROR_HANDLE_MISMATCH

           The transaction and entry are not derived from the same handle.


       SCF_ERROR_IN_USE

           The  property already has an entry in the transaction, or the entry
           is already associated with this transaction.


       SCF_ERROR_INTERNAL

           An internal error occurred.


       SCF_ERROR_INVALID_ARGUMENT

           The prop_name argument is not a valid property name.


       SCF_ERROR_NO_RESOURCES

           The server does not have the resources to complete the request.


       SCF_ERROR_NOT_BOUND

           The handle is not bound.


       SCF_ERROR_NOT_SET

           The transaction has not been started.


       SCF_ERROR_TYPE_MISMATCH

           The tran argument is not of a type compatible with type.



       The      scf_transaction_property_delete(),       scf_transaction_prop‐
       erty_change(),   and  scf_transaction_property_change_type()  functions
       will fail if:

       SCF_ERROR_EXISTS       The object already exists.


       SCF_ERROR_NOT_FOUND    The property group does not contain  a  property
                              named prop_name.



       The scf_transaction_property_new() , scf_transaction_property_change(),
       and scf_transaction_property_change_type() functions will fail if:

       SCF_ERROR_INVALID_ARGUMENT    The prop_name argument is not not a valid
                                     property name, or the type argument is an
                                     invalid type.



       The scf_transaction_property_new() function will fail if:

       SCF_ERROR_EXISTS       The property group already contains  a  property
                              named prop_name.


       SCF_ERROR_NOT_FOUND    Nothing of that name was found.



       The scf_transaction_property_change() function will fail if:

       SCF_ERROR_TYPE_MISMATCH    The property prop_name is not of type type.



       The scf_transaction_commit() function will fail if:

       SCF_ERROR_BACKEND_READONLY

           The repository backend is read-only.


       SCF_ERROR_BACKEND_ACCESS

           The repository backend refused the modification.


       SCF_ERROR_NOT_BOUND

           The handle is not bound.


       SCF_ERROR_CONNECTION_BROKEN

           The connection to the repository was lost.


       SCF_ERROR_INVALID_ARGUMENT

           The transaction is in an invalid state.


       SCF_ERROR_DELETED

           The property group the transaction is acting on has been deleted.


       SCF_ERROR_NOT_SET

           The transaction has not been started.


       SCF_ERROR_PERMISSION_DENIED

           The user does not have sufficient privileges to modify the property
           group.


       SCF_ERROR_NO_RESOURCES

           The server does not have sufficient resources to commit the  trans‐
           action.



       The scf_error(3SCF) function can be used to retrieve the error value.

EXAMPLES
       Example 1 Set an existing boolean value to true.


         tx = scf_transaction_create(handle);
         e1 = scf_entry_create(handle);
         v1 = scf_value_create(handle);

         do {
              if (scf_pg_update(pg) == -1)
                   goto fail;
              if (scf_transaction_start(tx, pg) == -1)
                   goto fail;

              /* set up transaction entries */
              if (scf_transaction_property_change(tx, e1, "property",
                 SCF_TYPE_BOOLEAN) == -1) {
                     scf_transaction_reset(tx);
                     goto fail;
              }
              scf_value_set_boolean(v1, 1);
              scf_entry_add_value(e1, v1);


              result = scf_transaction_commit(tx);

              scf_transaction_reset(tx);
         } while (result == 0);

         if (result < 0)
              goto fail;

         /* success */

            cleanup:
         scf_transaction_destroy(tx);
         scf_entry_destroy(e1);
         scf_value_destroy(v1);


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Interface StabilityCommitted _ MT-LevelSafe


SEE ALSO
       libscf(3LIB),           scf_error(3SCF),           scf_pg_create(3SCF),
       scf_value_reset(3SCF), attributes(7)



Oracle Solaris 11.4               14 Aug 2017
                                                  scf_transaction_create(3SCF)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3