📄 atm_client_rpc.c
字号:
/******************************************************** * An example source module to accompany... * * "Using POSIX Threads: Programming with Pthreads" * by Brad nichols, Dick Buttlar, Jackie Farrell * O'Reilly & Associates, Inc. * ******************************************************** * atm_client_rpc.c * * RPC style call interface to access atm server. * ONC, DCE RPC etc. where invented so we wouldn't have to do this * anymore. * But seeing how this is for a book on pthreads and not RPC * generators and is ment to be as portable as possible, .... */#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include "atm.h"#include "atm_com.h"/******************************************************************* * Open an account with the bank. * *******************************************************************/int accnt_open_rpc(int *idp, int *passwordp){ int success; char err_msg[ERR_MSG_SIZE]; char req_buf[COMM_BUF_SIZE], resp_buf[COMM_BUF_SIZE]; sprintf(req_buf, "%d", OPEN_ACCT_TRANS); client_comm_send_request(req_buf); client_comm_get_response(resp_buf); sscanf(resp_buf, "%d", &success); if (success) { sscanf(resp_buf, "%d %d %d", &success, idp, passwordp); return 1; } else { sscanf(resp_buf, "%d %s", &success, err_msg); fprintf(stderr, "Open transaction failed, %s\n", err_msg); return -1; }}/********************************************************************* * Deposit money in an account * ********************************************************************/int accnt_deposit_rpc(int id, int password, int amount){ int success; char err_msg[ERR_MSG_SIZE]; char req_buf[COMM_BUF_SIZE], resp_buf[COMM_BUF_SIZE]; sprintf(req_buf, "%d %d %d %d", DEPOSIT_TRANS, id, password, amount); client_comm_send_request(req_buf); client_comm_get_response(resp_buf); sscanf(resp_buf, "%d", &success); if (success) { return 1; } else { sscanf(resp_buf, "%d %s", &success, err_msg); fprintf(stderr, "Deposit transaction failed, %s\n", err_msg); return -1; }}/******************************************************************** * Withdraw money form an account. * ********************************************************************/int accnt_withdraw_rpc(int id, int password, int amount){ int success; char err_msg[ERR_MSG_SIZE]; char req_buf[COMM_BUF_SIZE], resp_buf[COMM_BUF_SIZE]; sprintf(req_buf, "%d %d %d %d", WITHDRAW_TRANS, id, password, amount); client_comm_send_request(req_buf); client_comm_get_response(resp_buf); sscanf(resp_buf, "%d", &success); if (success) { return 1; } else { sscanf(resp_buf, "%d %s", &success, err_msg); fprintf(stderr, "Withdraw transaction failed, %s\n", err_msg); return -1; }}/********************************************************************* * Get the current balance of an account. * ******************************************************************/int accnt_balance_rpc(int id, int password, int *balancep){ int success; char err_msg[ERR_MSG_SIZE]; char req_buf[COMM_BUF_SIZE], resp_buf[COMM_BUF_SIZE]; sprintf(req_buf, "%d %d %d", BALANCE_TRANS, id, password); client_comm_send_request(req_buf); client_comm_get_response(resp_buf); sscanf(resp_buf, "%d", &success); if (success) { sscanf(resp_buf, "%d %d", &success, balancep); return 1; } else { sscanf(resp_buf, "%d %s", &success, err_msg); fprintf(stderr, "Balance transaction failed %s\n", err_msg); return -1; }}/********************************************************************* * Send a request to shutdown the server. * * Requires a special server password be used. ********************************************************************/int server_shutdown_rpc(int server_password){ int success; char err_msg[ERR_MSG_SIZE]; char req_buf[COMM_BUF_SIZE], resp_buf[COMM_BUF_SIZE]; sprintf(req_buf, "%d %d", SHUTDOWN, server_password); client_comm_send_request(req_buf); client_comm_get_response(resp_buf); sscanf(resp_buf, "%d", &success); if (success) { return 1; } else { sscanf(resp_buf, "%d %s", &success, err_msg); fprintf(stderr, "Shutdown server transaction failed %s\n", err_msg); return -1; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -