"日期:2021年5月10日\n实习日记:Linux实习\n编写人:xxx\n\n今天的任务是实现发送消息功能,并且需要使用文件链表来保存消息记录。\n\n首先,我创建了一个名为message.h的头文件,用于定义消息结构体和相关的函数。消息结构体包含了发送者、接收者、消息内容和发送时间等信息。函数包括创建消息、发送消息、保存消息和加载消息等操作。\n\nc\n#ifndef MESSAGE_H\n#define MESSAGE_H\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n\n// 消息结构体\ntypedef struct Message {\n char sender[50]; // 发送者\n char receiver[50]; // 接收者\n char content[100]; // 消息内容\n time_t send_time; // 发送时间\n struct Message* next; // 下一条消息\n} Message;\n\n// 创建消息\nMessage* create_message(const char* sender, const char* receiver, const char* content);\n\n// 发送消息\nvoid send_message(Message* message);\n\n// 保存消息\nvoid save_message(Message* message);\n\n// 加载消息\nMessage* load_messages();\n\n#endif\n\n\n接下来,我创建了一个名为message.c的源文件,实现了message.h中定义的函数。\n\nc\n#include \"message.h\"\n\n// 创建消息\nMessage* create_message(const char* sender, const char* receiver, const char* content) {\n Message* message = (Message*)malloc(sizeof(Message));\n strncpy(message->sender, sender, sizeof(message->sender));\n strncpy(message->receiver, receiver, sizeof(message->receiver));\n strncpy(message->content, content, sizeof(message->content));\n message->send_time = time(NULL);\n message->next = NULL;\n return message;\n}\n\n// 发送消息\nvoid send_message(Message* message) {\n printf(\"发送消息:\n\");\n printf(\"发送者:%s\n\", message->sender);\n printf(\"接收者:%s\n\", message->receiver);\n printf(\"内容:%s\n\", message->content);\n printf(\"发送时间:%s\", ctime(&message->send_time));\n // 实际发送消息的操作\n}\n\n// 保存消息\nvoid save_message(Message* message) {\n FILE* file = fopen(\"message.txt\", \"a\");\n if (file == NULL) {\n printf(\"无法打开文件\n\");\n return;\n }\n fprintf(file, \"发送者:%s\n\", message->sender);\n fprintf(file, \"接收者:%s\n\", message->receiver);\n fprintf(file, \"内容:%s\n\", message->content);\n fprintf(file, \"发送时间:%s\", ctime(&message->send_time));\n fclose(file);\n}\n\n// 加载消息\nMessage* load_messages() {\n Message* head = NULL;\n Message* tail = NULL;\n FILE* file = fopen(\"message.txt\", \"r\");\n if (file == NULL) {\n printf(\"无法打开文件\n\");\n return NULL;\n }\n char line[256];\n char sender[50];\n char receiver[50];\n char content[100];\n time_t send_time;\n while (fgets(line, sizeof(line), file) != NULL) {\n if (strncmp(line, \"发送者:\", 6) == 0) {\n strncpy(sender, line + 6, sizeof(sender));\n sender[strlen(sender) - 1] = '\\0'; // 去掉换行符\n } else if (strncmp(line, \"接收者:\", 6) == 0) {\n strncpy(receiver, line + 6, sizeof(receiver));\n receiver[strlen(receiver) - 1] = '\\0'; // 去掉换行符\n } else if (strncmp(line, \"内容:\", 4) == 0) {\n strncpy(content, line + 4, sizeof(content));\n content[strlen(content) - 1] = '\\0'; // 去掉换行符\n } else if (strncmp(line, \"发送时间:\", 6) == 0) {\n struct tm* timeinfo;\n line[strlen(line) - 1] = '\\0'; // 去掉换行符\n strptime(line + 6, \"%a %b %d %H:%M:%S %Y\", timeinfo);\n send_time = mktime(timeinfo);\n Message* message = create_message(sender, receiver, content);\n message->send_time = send_time;\n if (head == NULL) {\n head = message;\n tail = message;\n } else {\n tail->next = message;\n tail = message;\n }\n }\n }\n fclose(file);\n return head;\n}\n\n\n在主函数中,我使用这些函数来测试发送消息和保存消息的功能。\n\nc\n#include \"message.h\"\n\nint main() {\n Message* message1 = create_message(\"Alice\", \"Bob\", \"Hello, Bob!\");\n send_message(message1);\n save_message(message1);\n\n Message* message2 = create_message(\"Bob\", \"Alice\", \"Hi, Alice!\");\n send_message(message2);\n save_message(message2);\n\n Message* message3 = create_message(\"Alice\", \"Bob\", \"How are you?\");\n send_message(message3);\n save_message(message3);\n\n Message* messages = load_messages();\n Message* current = messages;\n while (current != NULL) {\n printf(\"加载消息:\n\");\n printf(\"发送者:%s\n\", current->sender);\n printf(\"接收者:%s\n\", current->receiver);\n printf(\"内容:%s\n\", current->content);\n printf(\"发送时间:%s\", ctime(&current->send_time));\n current = current->next;\n }\n\n return 0;\n}\n\n\n编译运行程序后,我成功发送了几条消息,并将消息保存到了message.txt文件中。然后,我加载了这些消息,并打印出来进行验证,结果与发送的消息一致。\n\n通过实现发送消息功能和使用文件链表保存消息记录,我完成了今天的任务。在明天的实习中,我将继续完善飞鸽传书程序的其他功能。

Linux 实习日记:使用 C 语言编写飞鸽传书 - 发送消息功能与文件链表实现

原文地址: https://www.cveoy.top/t/topic/p98u 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录