寒假(五)

news/2025/2/5 15:06:26/

请使用read 和 write 实现链表保存到文件,以及从文件加载数据到链表中的功能

link.h

#ifndef __link__
#define __link__#include <stdio.h>
#include <string.h>
#include <unistd.h> 
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>typedef struct node
{union{int len;char arr[10];};struct node* next;
}linklist,*linkptr;linkptr create();int add(linkptr p,char* brr);void seav(linkptr p,char *filename);void load(linkptr p,char *filename);#endif

link.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>typedef struct linklist {char arr[10];struct linklist *next;int len;
} linklist;typedef linklist *linkptr;// 创建链表
linkptr create() {linkptr p = (linkptr)malloc(sizeof(linklist));if (NULL == p) {printf("创建失败\n");return NULL;}p->len = 0;p->next = NULL;return p;
}// 添加节点
int add(linkptr p, char *brr) {if (NULL == p) {printf("增加失败\n");return 0;}linkptr e = (linkptr)malloc(sizeof(linklist));if (NULL == e) {printf("内存分配失败\n");return 0;}strcpy(e->arr, brr);e->next = p->next;p->next = e;p->len++;return 1;
}// 保存链表到文件
void save(linkptr h, char *filename) {if (NULL == h) {printf("写入文件失败\n");return;}FILE *fp = fopen(filename, "w");if (fp == NULL) {perror("fopen");return;}linkptr p = h->next;while (p != NULL) {fprintf(fp, "%s\n", p->arr);p = p->next;}fclose(fp);
}// 从文件加载链表
void load(linkptr h, char *filename) {if (NULL == h) {printf("载入失败\n");return;}FILE *fp = fopen(filename, "r");if (fp == NULL) {perror("fopen");return;}while (1) {char brr[11] = {0}; // 确保有足够的空间存储字符串和结束符if (fgets(brr, sizeof(brr), fp) == NULL) {break;}brr[strcspn(brr, "\n")] = '\0'; // 移除换行符add(h, brr);}fclose(fp);
}

main.c

#include"link.h"int main(){linkptr l=create();add(l,"zzy");add(l,"hqyj");add(l,"666");seav(6,"1.txt");linkptr l2=create();load(l2,"1.txt");return 0;
}


http://www.ppmy.cn/news/1569537.html

相关文章

『 C 』 `##` 在 C 语言宏定义中的作用解析

文章目录 ## 运算符的基本概念可变参数宏与 ## 的应用可变参数宏简介## 处理可变参数的两种情况可变参数列表为空可变参数列表不为空 示例代码验证 在 C 和 C 编程里&#xff0c;宏定义是个很有用的工具。今天咱们就来聊聊 ## 这个预处理器连接运算符在宏定义中的作用&#xff…

高精度乘法(高×高)

高精度乘法&#xff08;高高&#xff09; 前言 ACWing算法基础课讲解了高低的乘法&#xff0c;这里高高作为一个进一步的补充&#xff0c;也是对闫总的板子做一个补充。 以下内容改编自《洛谷深入浅出》123页&#xff0c;我对代码进行了一点修改。 A*B Problem P1303 题目…

Python在线编辑器

from flask import Flask, render_template, request, jsonify import sys from io import StringIO import contextlib import subprocess import importlib import threading import time import ast import reapp Flask(__name__)RESTRICTED_PACKAGES {tkinter: 抱歉&…

「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)

深度学习&#xff08;DL&#xff09;是现代人工智能&#xff08;AI&#xff09;的核心之一&#xff0c;但它并不是一夜之间出现的技术。从最初的理论提出到如今的广泛应用&#xff0c;深度学习经历了几乎一个世纪的不断探索与发展。今天&#xff0c;我们一起回顾深度学习的历史…

Redis基础篇(万丈高楼平地起):核心底层数据结构

大家好&#xff0c;我是小龙。近期有很多小伙伴私信我Redis怎么做持久化&#xff1f;集群方案怎么做&#xff1f;分布式锁怎么实现&#xff1f;可是我发现&#xff0c;每次简答完一个问题他还有其他类似问题&#xff0c;或则各个知识点不能串通形成体系&#xff0c;导致很多问题…

windows蓝牙驱动开发-生成和发送蓝牙请求块 (BRB)

以下过程概述了配置文件驱动程序生成和发送蓝牙请求块 (BRB) 应遵循的一般流程。 BRB 是描述要执行的蓝牙操作的数据块。 生成和发送 BRB 分配 IRP。 分配BRB&#xff0c;请调用蓝牙驱动程序堆栈导出以供配置文件驱动程序使用的 BthAllocateBrb 函数。&#xff1b;初始化 BRB…

网络原理一> ip协议相关特性

目录 概述&#xff1a;IP协议结构属性理解&#xff1a;4位版本&#xff1a;4位部首长度&#xff1a;8位服务类型&#xff1a;16位总长度字节数&#xff1a;8位生存时间&#xff1a;8位协议&#xff1a;16位部首检验和&#xff1a;32位源IP地址和32位目的IP地址&#xff1a; IP地…

蓝桥杯嵌入式uart,iic,adc_scan模版

本次用到的是ttl电平 1.波特率配置 2.中断使能 为什么会乱码 //uartmy_main.h #include "my_main.h" uint8_t led_sta0x10; char text[30]; char uart_tx[50]; char uart_rx[50];extern struct Bkeys bkey[]; char passwd[3]{1,2,3}; void LED_Disp(uint8_t dsLED)…