JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
man pages section 3: Extended Library Functions
search filter icon
search icon

Document Information

Preface

Extended Library Functions - Part 1

Extended Library Functions - Part 2

Extended Library Functions - Part 3

Extended Library Functions - Part 4

Extended Library Functions - Part 5

pool_value_get_type(3POOL)

pool_value_get_uint64(3POOL)

pool_value_set_bool(3POOL)

pool_value_set_double(3POOL)

pool_value_set_int64(3POOL)

pool_value_set_name(3POOL)

pool_value_set_string(3POOL)

pool_value_set_uint64(3POOL)

pool_version(3POOL)

pool_walk_components(3POOL)

pool_walk_pools(3POOL)

pool_walk_properties(3POOL)

pool_walk_resources(3POOL)

pow(3M)

powf(3M)

powl(3M)

ppc_file_start(3TECLA)

ppc_literal_escapes(3TECLA)

printDmiAttributeValues(3DMI)

printDmiDataUnion(3DMI)

printDmiString(3DMI)

Privilege(3PERL)

Project(3PERL)

project_walk(3PROJECT)

ptree_add_node(3PICLTREE)

ptree_add_prop(3PICLTREE)

ptree_add_row_to_table(3PICLTREE)

ptree_create_and_add_node(3PICLTREE)

ptree_create_and_add_prop(3PICLTREE)

ptree_create_node(3PICLTREE)

ptree_create_prop(3PICLTREE)

ptree_create_table(3PICLTREE)

ptree_delete_node(3PICLTREE)

ptree_delete_prop(3PICLTREE)

ptree_destroy_node(3PICLTREE)

ptree_destroy_prop(3PICLTREE)

ptree_find_node(3PICLTREE)

ptree_get_first_prop(3PICLTREE)

ptree_get_frutree_parent(3PICLTREE)

ptree_get_next_by_col(3PICLTREE)

ptree_get_next_by_row(3PICLTREE)

ptree_get_next_prop(3PICLTREE)

ptree_get_node_by_path(3PICLTREE)

ptree_get_prop_by_name(3PICLTREE)

ptree_get_propinfo(3PICLTREE)

ptree_get_propinfo_by_name(3PICLTREE)

ptree_get_propval(3PICLTREE)

ptree_get_propval_by_name(3PICLTREE)

ptree_get_root(3PICLTREE)

ptree_init_propinfo(3PICLTREE)

ptree_post_event(3PICLTREE)

ptree_register_handler(3PICLTREE)

ptree_unregister_handler(3PICLTREE)

ptree_update_propval(3PICLTREE)

ptree_update_propval_by_name(3PICLTREE)

ptree_walk_tree_by_class(3PICLTREE)

rd_delete(3EXT)

rd_errstr(3EXT)

rd_event_addr(3EXT)

rd_event_enable(3EXT)

rd_event_getmsg(3EXT)

rd_init(3EXT)

rd_loadobj_iter(3EXT)

rd_log(3EXT)

rd_new(3EXT)

rd_objpad_enable(3EXT)

rd_plt_resolution(3EXT)

rd_reset(3EXT)

read_vtoc(3EXT)

reg_ci_callback(3DMI)

regexpr(3GEN)

remainder(3M)

remainderf(3M)

remainderl(3M)

remquo(3M)

remquof(3M)

remquol(3M)

rint(3M)

rintf(3M)

rintl(3M)

rmdirp(3GEN)

round(3M)

roundf(3M)

roundl(3M)

rsm_create_localmemory_handle(3RSM)

rsm_free_interconnect_topology(3RSM)

rsm_free_localmemory_handle(3RSM)

rsm_get_controller(3RSM)

rsm_get_controller_attr(3RSM)

rsm_get_interconnect_topology(3RSM)

rsm_get_segmentid_range(3RSM)

rsm_intr_signal_post(3RSM)

rsm_intr_signal_wait(3RSM)

rsm_intr_signal_wait_pollfd(3RSM)

rsm_memseg_export_create(3RSM)

rsm_memseg_export_destroy(3RSM)

rsm_memseg_export_publish(3RSM)

rsm_memseg_export_rebind(3RSM)

rsm_memseg_export_republish(3RSM)

rsm_memseg_export_unpublish(3RSM)

rsm_memseg_get_pollfd(3RSM)

rsm_memseg_import_close_barrier(3RSM)

rsm_memseg_import_connect(3RSM)

rsm_memseg_import_destroy_barrier(3RSM)

rsm_memseg_import_disconnect(3RSM)

rsm_memseg_import_get16(3RSM)

rsm_memseg_import_get32(3RSM)

rsm_memseg_import_get(3RSM)

rsm_memseg_import_get64(3RSM)

rsm_memseg_import_get8(3RSM)

rsm_memseg_import_get_mode(3RSM)

rsm_memseg_import_getv(3RSM)

rsm_memseg_import_init_barrier(3RSM)

rsm_memseg_import_map(3RSM)

rsm_memseg_import_open_barrier(3RSM)

rsm_memseg_import_order_barrier(3RSM)

rsm_memseg_import_put16(3RSM)

rsm_memseg_import_put32(3RSM)

rsm_memseg_import_put(3RSM)

rsm_memseg_import_put64(3RSM)

rsm_memseg_import_put8(3RSM)

rsm_memseg_import_putv(3RSM)

rsm_memseg_import_set_mode(3RSM)

rsm_memseg_import_unmap(3RSM)

rsm_memseg_release_pollfd(3RSM)

rsm_release_controller(3RSM)

rtld_audit(3EXT)

rtld_db(3EXT)

sbcleartos(3TSOL)

sbltos(3TSOL)

sbsltos(3TSOL)

scalb(3M)

scalbf(3M)

scalbl(3M)

scalbln(3M)

scalblnf(3M)

scalblnl(3M)

scalbn(3M)

scalbnf(3M)

scalbnl(3M)

SCF_Card_close(3SMARTCARD)

SCF_Card_exchangeAPDU(3SMARTCARD)

SCF_Card_freeInfo(3SMARTCARD)

SCF_Card_getInfo(3SMARTCARD)

SCF_Card_lock(3SMARTCARD)

SCF_Card_reset(3SMARTCARD)

SCF_Card_unlock(3SMARTCARD)

SCF_Card_waitForCardRemoved(3SMARTCARD)

scf_entry_add_value(3SCF)

scf_entry_create(3SCF)

scf_entry_destroy(3SCF)

scf_entry_destroy_children(3SCF)

scf_entry_handle(3SCF)

scf_entry_reset(3SCF)

scf_error(3SCF)

scf_handle_bind(3SCF)

scf_handle_create(3SCF)

scf_handle_decode_fmri(3SCF)

scf_handle_decorate(3SCF)

scf_handle_destroy(3SCF)

scf_handle_get_scope(3SCF)

scf_handle_unbind(3SCF)

scf_instance_add_pg(3SCF)

scf_instance_create(3SCF)

scf_instance_delete(3SCF)

scf_instance_destroy(3SCF)

scf_instance_get_name(3SCF)

scf_instance_get_parent(3SCF)

scf_instance_get_pg(3SCF)

scf_instance_get_pg_composed(3SCF)

scf_instance_get_snapshot(3SCF)

scf_instance_handle(3SCF)

scf_instance_to_fmri(3SCF)

scf_iter_create(3SCF)

scf_iter_destroy(3SCF)

scf_iter_handle(3SCF)

scf_iter_handle_scopes(3SCF)

scf_iter_instance_pgs(3SCF)

scf_iter_instance_pgs_composed(3SCF)

scf_iter_instance_pgs_typed(3SCF)

scf_iter_instance_pgs_typed_composed(3SCF)

scf_iter_instance_snapshots(3SCF)

scf_iter_next_instance(3SCF)

scf_iter_next_pg(3SCF)

scf_iter_next_property(3SCF)

scf_iter_next_scope(3SCF)

scf_iter_next_service(3SCF)

scf_iter_next_snapshot(3SCF)

scf_iter_next_value(3SCF)

scf_iter_pg_properties(3SCF)

scf_iter_property_values(3SCF)

scf_iter_reset(3SCF)

scf_iter_scope_services(3SCF)

scf_iter_service_instances(3SCF)

scf_iter_service_pgs(3SCF)

scf_iter_service_pgs_typed(3SCF)

scf_iter_snaplevel_pgs(3SCF)

scf_iter_snaplevel_pgs_typed(3SCF)

scf_limit(3SCF)

scf_myname(3SCF)

scf_pg_create(3SCF)

scf_pg_delete(3SCF)

scf_pg_destroy(3SCF)

scf_pg_get_flags(3SCF)

scf_pg_get_name(3SCF)

scf_pg_get_parent_instance(3SCF)

scf_pg_get_parent_service(3SCF)

scf_pg_get_parent_snaplevel(3SCF)

scf_pg_get_property(3SCF)

scf_pg_get_type(3SCF)

scf_pg_get_underlying_pg(3SCF)

scf_pg_handle(3SCF)

scf_pg_to_fmri(3SCF)

scf_pg_update(3SCF)

scf_property_create(3SCF)

scf_property_destroy(3SCF)

scf_property_get_name(3SCF)

scf_property_get_value(3SCF)

scf_property_handle(3SCF)

scf_property_is_type(3SCF)

scf_property_to_fmri(3SCF)

scf_property_type(3SCF)

scf_scope_add_service(3SCF)

scf_scope_create(3SCF)

scf_scope_destroy(3SCF)

scf_scope_get_name(3SCF)

scf_scope_get_service(3SCF)

scf_scope_handle(3SCF)

scf_scope_to_fmri(3SCF)

scf_service_add_instance(3SCF)

scf_service_add_pg(3SCF)

scf_service_create(3SCF)

scf_service_delete(3SCF)

scf_service_destroy(3SCF)

scf_service_get_instance(3SCF)

scf_service_get_name(3SCF)

scf_service_get_parent(3SCF)

scf_service_get_pg(3SCF)

scf_service_handle(3SCF)

scf_service_to_fmri(3SCF)

SCF_Session_close(3SMARTCARD)

SCF_Session_freeInfo(3SMARTCARD)

SCF_Session_getInfo(3SMARTCARD)

SCF_Session_getSession(3SMARTCARD)

SCF_Session_getTerminal(3SMARTCARD)

scf_simple_app_props_free(3SCF)

scf_simple_app_props_get(3SCF)

scf_simple_app_props_next(3SCF)

scf_simple_app_props_search(3SCF)

scf_simple_prop_free(3SCF)

scf_simple_prop_get(3SCF)

scf_simple_prop_name(3SCF)

scf_simple_prop_next_astring(3SCF)

scf_simple_prop_next_boolean(3SCF)

scf_simple_prop_next_count(3SCF)

scf_simple_prop_next_integer(3SCF)

scf_simple_prop_next_opaque(3SCF)

scf_simple_prop_next_reset(3SCF)

scf_simple_prop_next_time(3SCF)

scf_simple_prop_next_ustring(3SCF)

scf_simple_prop_numvalues(3SCF)

scf_simple_prop_pgname(3SCF)

scf_simple_prop_type(3SCF)

scf_simple_walk_instances(3SCF)

scf_snaplevel_create(3SCF)

scf_snaplevel_destroy(3SCF)

scf_snaplevel_get_instance_name(3SCF)

scf_snaplevel_get_next_snaplevel(3SCF)

scf_snaplevel_get_parent(3SCF)

scf_snaplevel_get_pg(3SCF)

scf_snaplevel_get_scope_name(3SCF)

scf_snaplevel_get_service_name(3SCF)

scf_snaplevel_handle(3SCF)

scf_snapshot_create(3SCF)

scf_snapshot_destroy(3SCF)

scf_snapshot_get_base_snaplevel(3SCF)

scf_snapshot_get_name(3SCF)

scf_snapshot_get_parent(3SCF)

scf_snapshot_handle(3SCF)

scf_snapshot_update(3SCF)

scf_strerror(3SCF)

SCF_strerror(3SMARTCARD)

SCF_Terminal_addEventListener(3SMARTCARD)

SCF_Terminal_close(3SMARTCARD)

SCF_Terminal_freeInfo(3SMARTCARD)

SCF_Terminal_getCard(3SMARTCARD)

SCF_Terminal_getInfo(3SMARTCARD)

SCF_Terminal_removeEventListener(3SMARTCARD)

SCF_Terminal_updateEventListener(3SMARTCARD)

SCF_Terminal_waitForCardAbsent(3SMARTCARD)

SCF_Terminal_waitForCardPresent(3SMARTCARD)

scf_transaction_commit(3SCF)

scf_transaction_create(3SCF)

scf_transaction_destroy(3SCF)

scf_transaction_destroy_children(3SCF)

scf_transaction_handle(3SCF)

scf_transaction_property_change(3SCF)

scf_transaction_property_change_type(3SCF)

scf_transaction_property_delete(3SCF)

scf_transaction_property_new(3SCF)

scf_transaction_reset(3SCF)

scf_transaction_reset_all(3SCF)

scf_transaction_start(3SCF)

scf_type_base_type(3SCF)

scf_value_base_type(3SCF)

scf_value_create(3SCF)

scf_value_destroy(3SCF)

scf_value_get_as_string(3SCF)

scf_value_get_as_string_typed(3SCF)

scf_value_get_astring(3SCF)

scf_value_get_boolean(3SCF)

scf_value_get_count(3SCF)

scf_value_get_integer(3SCF)

scf_value_get_opaque(3SCF)

scf_value_get_time(3SCF)

scf_value_get_ustring(3SCF)

scf_value_handle(3SCF)

scf_value_is_type(3SCF)

scf_value_reset(3SCF)

scf_value_set_astring(3SCF)

scf_value_set_boolean(3SCF)

scf_value_set_count(3SCF)

scf_value_set_from_string(3SCF)

scf_value_set_integer(3SCF)

scf_value_set_opaque(3SCF)

scf_value_set_time(3SCF)

scf_value_set_ustring(3SCF)

scf_value_type(3SCF)

sendfile(3EXT)

sendfilev(3EXT)

setac(3BSM)

setauclass(3BSM)

setauevent(3BSM)

setauthattr(3SECDB)

setauuser(3BSM)

setddent(3BSM)

setddfile(3BSM)

setexecattr(3SECDB)

setflabel(3TSOL)

setprofattr(3SECDB)

setproject(3PROJECT)

setprojent(3PROJECT)

setuserattr(3SECDB)

sha1(3EXT)

SHA1Final(3EXT)

SHA1Init(3EXT)

SHA1Update(3EXT)

sha2(3EXT)

SHA256Final(3EXT)

SHA256Init(3EXT)

SHA256Update(3EXT)

SHA2Final(3EXT)

SHA2Init(3EXT)

SHA2Update(3EXT)

SHA384Final(3EXT)

SHA384Init(3EXT)

SHA384Update(3EXT)

SHA512Final(3EXT)

SHA512Init(3EXT)

SHA512Update(3EXT)

signbit(3M)

significand(3M)

significandf(3M)

Extended Library Functions - Part 6

SCF_Card_lock

, SCF_Card_unlock

- perform mutex locking on a card

Synopsis

cc [ flag… ] file-lsmartcard [ library…] 
#include <smartcard/scf.h>

SCF_Status_t SCF_Card_lock(SCF_Card_t card, unsigned int timeout);
SCF_Status_t SCF_Card_unlock(SCF_Card_t card);

Parameters

card

The card (from SCF_Terminal_getCard(3SMARTCARD)) to be locked.

timeout

The maximum number of seconds SCF_Card_lock() should wait for a card locked by another application to become unlocked. A value of 0 results in SCF_Card_lock() returning immediately if a lock cannot be immediately obtained. A value of SCF_TIMEOUT_MAX results in SCF_Card_lock() waiting forever to obtain a lock.

Description

Locking a card allows an application to perform a multi-APDU transaction (that is, multiple calls to SCF_Card_exchangeAPDU(3SMARTCARD)) without interference from other smartcard applications. The lock is enforced by the server, so that other applications that attempt to call SCF_Card_exchangeAPDU() or SCF_Card_reset(3SMARTCARD) will be denied access to the card. Applications should restrict use of locks only to brief critical sections. Otherwise it becomes difficult for multiple applications to share the same card.

When a lock is granted to a specific SCF_Card_t card object, only that object can be used to access the card and subsquently release the lock. If a misbehaving application holds a lock for an extended period, the lock can be broken by having the user remove and reinsert the smartcard.

It is an error to attempt to lock a card when the caller already holds a lock on the card (that is, calling SCF_Card_lock() twice in a succession). Unlocking a card that is not locked (or was already unlocked) can be performed without causing an error.

An application might find that it is unable to lock the card, or communicate with it because SCF_Card_exchangeAPDU() keeps returning SCF_STATUS_CARDLOCKED. If this situation persists, it might indicate that another application has not released its lock on the card. The user is able to forcably break a lock by removing the card and reinserting it, after which the application must call SCF_Terminal_getCard(3SMARTCARD) to access the "new" card. In this situation an application should retry for a reasonable period of time, and then alert the user that the operation could not be completed because the card is in use by another application and that removing or reinserting the card will resolve the problem.

Return Values

If the card is successfully locked or unlocked, SCF_STATUS_SUCCESS is returned. Otherwise, the lock status of the card remains unchanged and an error value is returned.

Errors

The SCF_Card_lock() and SCF_Card_lock() functions will fail if:

SCF_STATUS_BADHANDLE

The specified card has been closed or is invalid.

SCF_STATUS_CARDLOCKED

There is a lock present on the card, but it is not held by the specified card object. For example, the caller is attempting to unlock a card locked by another application.

SCF_STATUS_CARDREMOVED

The card object cannot be used because the card represented by the SCF_Card_t has been removed.

SCF_STATUS_COMMERROR

The connection to the server was lost.

SCF_STATUS_DOUBLELOCK

The caller has already locked this card and is attempting to lock it again.

SCF_STATUS_FAILED

An internal error occured.

SCF_STATUS_TIMEOUT

The timeout expired before the call was able to obtain the lock.

Examples

Example 1 Use a card lock.

SCF_Status_t status;
SCF_Card_t myCard;

/* (...call SCF_Terminal_getCard to open myCard...) */

status = SCF_Card_lock(myCard, 15);
if (status == SCF_STATUS_TIMEOUT) {                         
    printf("Unable to get a card lock, someone else has a lock.\n");
    exit(0);
}
else if (status != SCF_STATUS_SUCCESS) exit(1);
 
/* Send the first APDU */
SCF_Card_exchangeAPDU(myCard, ...);
 
/* Send the second APDU */
SCF_Card_exchangeAPDU(myCard, ...);
 
status = SCF_Card_unlock(myCard);
 
/* ... */

Attributes

See attributes(5) for descriptions of the following attributes:

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Interface Stability
Evolving
MT-Level
MT-Safe

See Also

libsmartcard(3LIB), SCF_Card_exchangeAPDU(3SMARTCARD), SCF_Card_reset(3SMARTCARD), SCF_Terminal_getCard(3SMARTCARD), attributes(5)