⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cliserv.h

📁 《Beginning_Linux_Programming_Third_Edition》这本书的附带程序
💻 H
字号:
// There follow the required #include headers.#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <limits.h>#include <sys/types.h>#include <sys/stat.h>// We then define the named pipes. We use one pipe for the server and one pipe for each client.// Since there may be multiple clients, the client incorporates a process ID into the name// to ensure that its pipe is unique.#define SERVER_PIPE "/tmp/server_pipe"#define CLIENT_PIPE "/tmp/client_%d_pipe"#define ERR_TEXT_LEN 80// We implement the commands as enumerated types, rather than #defines.// This is a good way of allowing the compiler to do more type checking and also helps// in debugging the application, as many debuggers are able to show the name of enumerated// constants, but not the name defined by a #define directive.// The first typedef gives the type of request being sent to the server, the second// the server response to the client.typedef enum {    s_create_new_database = 0,    s_get_cdc_entry,    s_get_cdt_entry,    s_add_cdc_entry,    s_add_cdt_entry,    s_del_cdc_entry,    s_del_cdt_entry,    s_find_cdc_entry} client_request_e;typedef enum {    r_success = 0,    r_failure,    r_find_no_more} server_response_e;// Next, we declare a structure that will form the message passed in both directions// between the two processes.// Since we don't actually need to return both a cdc_entry and cdt_entry in the same// response, we could have combined them in a union. For simplicity, we keep them separate.// This also makes the code easier to maintain.typedef struct {    pid_t               client_pid;    client_request_e    request;    server_response_e   response;    cdc_entry           cdc_entry_data;    cdt_entry           cdt_entry_data;    char                error_text[ERR_TEXT_LEN + 1];} message_db_t;// Finally, we get to the pipe interface functions that perform data transfer implemented// in pipe_imp.c. These divide into server- and client-side functions, in the first and// second blocks respectively.int server_starting(void);void server_ending(void);int read_request_from_client(message_db_t *rec_ptr);int start_resp_to_client(const message_db_t mess_to_send);int send_resp_to_client(const message_db_t mess_to_send);void end_resp_to_client(void);int client_starting(void);void client_ending(void);int send_mess_to_server(message_db_t mess_to_send);int start_resp_from_server(void);int read_resp_from_server(message_db_t *rec_ptr);void end_resp_from_server(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -