SCF_Session_close, SCF_Terminal_close, SCF_Card_close - close a smartcard session, terminal, or card
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);
card An object that was returned from SCF_Terminal_getCard(3SMARTCARD)
session An object that was returned from SCF_Session_getSession(3SMARTCARD)
terminal 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_Terminal_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.
Example 1: Close each object explicitly.
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);
Example 2: Allow the library to close objects.
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_Terminal_getInfo(3SMARTCARD), attributes(5)
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |