Name | Synopsis | Parameters | Description | Return Values | Examples | Attributes | See Also
cc [ flag… ] file… -lsmartcard [ library…] #include <smartcard/scf.h> SCF_Status_t SCF_Session_close(SCF_Session_t session);
SCF_Status_t SCF_Terminal_close(SCF_Terminal_t terminal);
SCF_Status_t SCF_Card_close(SCF_Card_t card);
An object that was returned from SCF_Terminal_getCard(3SMARTCARD)
An object that was returned from SCF_Session_getSession(3SMARTCARD)
An object that was returned from SCF_Session_getTerminal(3SMARTCARD)
These functions release the resources (memory, threads, and others) that were allocated within the library when the session, terminal, or card was opened. Any storage allocated by calls to SCF_Session_getInfo(3SMARTCARD), SCF_Session_getInfo(3SMARTCARD), or SCF_Card_getInfo(3SMARTCARD) is deallocated when the associated object is closed. Attempts to access results from these interfaces after the object has been closed results in undefined behavior.
If a card that was locked by SCF_Card_lock(3SMARTCARD) is closed, the lock is automatically released. When a terminal is closed, any event listeners on that terminal object are removed and any cards that were obtained with the terminal are closed. Similarly, closing a session will close any terminals or cards obtained with that session. These are the only cases where the library will automatically perform a close.
Once closed, a session, terminal, or card object can no longer be used by an SCF function. Any attempt to do so results in an SCF_STATUS_BADHANDLE error. The sole exception is that closing an object, even if already closed, is always a successful operation.
Closing a handle is always a successful operation that returns SCF_STATUS_SUCCESS. The library can safely detect handles that are invalid or already closed.
SCF_Status_t status; SCF_Session_t mySession; SCF_Terminal_t myTerminal; SCF_Card_t myCard; status = SCF_Session_getSession(&mySession); if (status != SCF_STATUS_SUCCESS) exit(1); status = SCF_Session_getTerminal(mySession, NULL, &myTerminal); if (status != SCF_STATUS_SUCCESS) exit(1); status = SCF_Terminal_getCard(myTerminal, &myCard); if (status != SCF_STATUS_SUCCESS) exit(1); /* (Do interesting things with smartcard...) */ SCF_Card_close(myCard); SCF_Terminal_close(myTerminal); SCF_Session_close(mySession);
SCF_Status_t status; SCF_Session_t mySession; SCF_Terminal_t myTerminal; SCF_Card_t myCard; status = SCF_Session_getSession(&mySession); if (status != SCF_STATUS_SUCCESS) exit(1); status = SCF_Session_getTerminal(mySession, NULL, &myTerminal); if (status != SCF_STATUS_SUCCESS) exit(1); status = SCF_Terminal_getCard(myTerminal, &myCard); if (status != SCF_STATUS_SUCCESS) exit(1); /* (Do interesting things with smartcard...) */ SCF_Session_close(mySession); /* myTerminal and myCard have been closed by the library. */
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE |
ATTRIBUTE VALUE |
---|---|
Interface Stability |
Evolving |
MT-Level |
MT-Safe |
libsmartcard(3LIB), SCF_Card_getInfo(3SMARTCARD), SCF_Card_lock(3SMARTCARD), SCF_Session_getInfo(3SMARTCARD), SCF_Session_getSession(3SMARTCARD), SCF_Session_getTerminal(3SMARTCARD), SCF_Terminal_getCard(3SMARTCARD), SCF_Session_getInfo(3SMARTCARD), attributes(5)
Name | Synopsis | Parameters | Description | Return Values | Examples | Attributes | See Also