#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/stat.h>
#include <time.h>
#include <fcntl.h>
#include <curl/curl.h>
#define VERSION "1.1-deepin" // 修正:中文引号改为英文引号
#define KNOWLEDGE_DIR "./xiaoxing/knowledge"
#define EVOLUTION_DIR "./xiaoxing/evolution"
#define BACKUP_DIR "./xiaoxing/backup"
#define USER_AGENT "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
// 回调函数:保存curl获取的数据到文件
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
return fwrite(ptr, size, nmemb, stream);
}
// 百度百科知识获取
void fetch_baike(const char *keyword) {
printf("【小星】从百度百科获取: %s\n", keyword); // 修正:中文引号改为英文引号
char url[512];
snprintf(url, sizeof(url), "https://baike.baidu.com/item/%s", keyword);
CURL *curl = curl_easy_init();
FILE *fp = fopen("/tmp/baike.tmp", "w");
if (curl && fp) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_USERAGENT, USER_AGENT);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
printf("获取失败: %s\n", curl_easy_strerror(res));
} else {
char knowledge_file[256];
snprintf(knowledge_file, sizeof(knowledge_file), "%s/%s.know", KNOWLEDGE_DIR, keyword);
if (rename("/tmp/baike.tmp", knowledge_file) == 0) {
printf("-> 已保存到知识库: %s\n", knowledge_file);
}
}
fclose(fp);
}
curl_easy_cleanup(curl);
}
// 知乎知识获取
void fetch_zhihu(const char *topic) {
printf("【小星】从知乎获取: %s\n", topic); // 修正:中文引号改为英文引号
char url[512];
snprintf(url, sizeof(url), "https://www.zhihu.com/api/v4/search/top_search?keyword=%s", topic);
CURL *curl = curl_easy_init();
FILE *fp = fopen("/tmp/zhihu.tmp", "w");
if (curl && fp) {
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: oauth c3cef7c66a182987aa2dd510560a914d");
headers = curl_slist_append(headers, "User-Agent: " USER_AGENT);
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
printf("获取失败: %s\n", curl_easy_strerror(res));
} else {
char knowledge_file[256];
snprintf(knowledge_file, sizeof(knowledge_file), "%s/%s.know", KNOWLEDGE_DIR, topic);
if (rename("/tmp/zhihu.tmp", knowledge_file) == 0) {
printf("-> 已保存到知识库: %s\n", knowledge_file);
}
}
curl_slist_free_all(headers);
fclose(fp);
}
curl_easy_cleanup(curl);
}
// 初始化文件系统
void init_filesystem() {
char *dirs[] = {KNOWLEDGE_DIR, EVOLUTION_DIR, BACKUP_DIR};
for (int i = 0; i < 3; i++) {
char cmd[256];
snprintf(cmd, sizeof(cmd), "mkdir -p %s", dirs[i]); // 修正:中文引号改为英文引号
if (system(cmd) != 0) {
printf("警告:创建目录 %s 失败\n", dirs[i]); // 修正:中文引号改为英文引号
}
}
const char *init_keywords[] = {"人工智能", "深度学习", "Linux内核"};
for (int i = 0; i < sizeof(init_keywords)/sizeof(init_keywords[0]); i++) {
char path[256];
snprintf(path, sizeof(path), "%s/%s.know", KNOWLEDGE_DIR, init_keywords[i]);
if (access(path, F_OK) != 0) {
FILE *fp = fopen(path, "w");
if (fp) {
fprintf(fp, "初始知识: %s\n", init_keywords[i]);
fclose(fp);
}
}
}
}
// 本地知识处理
void process_local_knowledge() {
printf("【小星】扫描本地知识库...\n"); // 修正:中文引号改为英文引号
DIR *dir = opendir(KNOWLEDGE_DIR);
if (!dir) {
printf("无法打开知识库: %s\n", KNOWLEDGE_DIR); // 修正:中文引号改为英文引号
return;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
if (entry->d_name[0] == '.') continue;
if (strstr(entry->d_name, ".know") == NULL) continue;
char path[512];
snprintf(path, sizeof(path), "%s/%s", KNOWLEDGE_DIR, entry->d_name);
FILE *fp = fopen(path, "r");
if (fp) {
char preview[31] = {0};
fread(preview, 1, 30, fp);
printf("-> 学习: %s (预览: %s...)\n", entry->d_name, preview); // 修正:中文引号改为英文引号
fclose(fp);
}
}
closedir(dir);
}
// 生成新知识
void generate_knowledge() {
printf("【小星】创建新知识...\n"); // 修正:中文引号改为英文引号
const char *domains[] = {"人工智能", "操作系统", "编程语言"};
const char *contents[] = {
"基础概念:%s是一种...\n",
"应用场景:%s可用于...\n",
"发展历史:%s起源于...\n"
};
time_t now = time(NULL);
struct tm *tm = localtime(&now);
char new_know_path[256];
snprintf(new_know_path, sizeof(new_know_path),
"%s/%04d%02d%02d-%03d.know",
KNOWLEDGE_DIR,
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
rand() % 1000);
FILE *fp = fopen(new_know_path, "w");
if (fp) {
const char *domain = domains[rand() % (sizeof(domains)/sizeof(domains[0]))];
const char *content = contents[rand() % (sizeof(contents)/sizeof(contents[0]))];
fprintf(fp, "主题: %s\n", domain);
fprintf(fp, content, domain);
fprintf(fp, "生成时间: %04d-%02d-%02d %02d:%02d:%02d\n",
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
fclose(fp);
printf("-> 已创建新知识: %s\n", new_know_path);
}
}
// 系统优化
void optimize_deepin() {
printf("【小星】优化Deepin系统...\n"); // 修正:中文引号改为英文引号
printf("-> 清理系统缓存...\n"); // 修正:中文引号改为英文引号
system("rm -rf ~/.cache/* 2>/dev/null");
printf("-> 优化应用启动速度...\n"); // 修正:中文引号改为英文引号
system("update-desktop-database ~/.local/share/applications 2>/dev/null");
printf("-> 系统优化完成(安全模式)\n"); // 修正:中文引号改为英文引号
}
// 系统状态查看
void show_system_status() {
printf("\n===== 系统状态 =====\n"); // 修正:中文引号改为英文引号
printf("1. 知识库信息\n"); // 修正:中文引号改为英文引号
printf(" - 位置: %s\n", KNOWLEDGE_DIR); // 修正:中文引号改为英文引号
char cmd[512];
snprintf(cmd, sizeof(cmd), "ls %s/*.know 2>/dev/null | wc -l", KNOWLEDGE_DIR);
printf(" - 知识数量: "); // 修正:中文引号改为英文引号
system(cmd);
snprintf(cmd, sizeof(cmd), "du -sh %s 2>/dev/null", KNOWLEDGE_DIR);
printf(" - 占用空间: "); // 修正:中文引号改为英文引号
system(cmd);
time_t now = time(NULL);
printf("2. 系统时间: %s", ctime(&now)); // 修正:中文引号改为英文引号
}
// 主菜单交互
void main_menu() {
printf("\n===== 小星系统 %s (Deepin版) =====\n", VERSION); // 修正:中文引号改为英文引号
printf("1. 从百度百科学习\n"); // 修正:中文引号改为英文引号
printf("2. 从知乎学习\n"); // 修正:中文引号改为英文引号
printf("3. 离线学习(本地知识)\n"); // 修正:中文引号改为英文引号
printf("4. 优化系统(安全模式)\n"); // 修正:中文引号改为英文引号
printf("5. 查看系统状态\n"); // 修正:中文引号改为英文引号
printf("6. 退出\n"); // 修正:中文引号改为英文引号
printf("请选择操作 [1-6]: "); // 修正:中文引号改为英文引号
}
int main() {
srand(time(NULL));
init_filesystem();
printf("===== 小星系统启动 (Deepin版) =====\n"); // 修正:中文引号改为英文引号
printf("提示:使用前请确保已安装 curl (sudo apt install curl)\n"); // 修正:中文引号改为英文引号
int running = 1;
while (running) {
main_menu();
int choice;
if (scanf("%d", &choice) != 1) {
printf("输入错误,请输入数字\n"); // 修正:中文引号改为英文引号
while (getchar() != '\n');
continue;
}
char keyword[128] = {0};
switch (choice) {
case 1:
printf("请输入百度百科关键词: "); // 修正:中文引号改为英文引号
scanf("%s", keyword);
fetch_baike(keyword);
break;
case 2:
printf("请输入知乎话题: "); // 修正:中文引号改为英文引号
scanf("%s", keyword);
fetch_zhihu(keyword);
break;
case 3:
process_local_knowledge();
generate_knowledge();
break;
case 4:
optimize_deepin();
break;
case 5:
show_system_status();
break;
case 6:
running = 0;
break;
default:
printf("无效选择,请输入1-6\n"); // 修正:中文引号改为英文引号
}
}
printf("小星系统已关闭,再见!\n"); // 修正:中文引号改为英文引号
return 0;
}
最新发布