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