open练习-c

逻辑书写

请写下你的逻辑,与参考逻辑对比,如有缺失,可细看本文

一、核心API清单

#include <fcntl.h>   // open()的标志位定义
#include <unistd.h>  // read/write/close/lseek

// 关键系统调用原型
int open(const char *pathname, int flags, mode_t mode);
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
off_t lseek(int fd, off_t offset, int whence);
int close(int fd);

二、函数详解

  1. open() - 文件门户
// 创建新文件(若存在则清空)
int fd = open("data.txt", O_RDWR | O_CREAT | O_TRUNC, 0644);
  • flags组合示例:
    • O_RDONLY:只读(默认)
    • O_WRONLY | O_APPEND:追加写入
    • O_EXCL:与O_CREAT联用,确保原子创建
  1. read()/write() - 数据传输
char buffer[1024];
ssize_t bytes_read = read(fd_in, buffer, sizeof(buffer));
ssize_t bytes_written = write(fd_out, buffer, bytes_read);
  • 返回值处理原则:
    • 0:实际读写的字节数

    • 0:EOF(仅read)
    • -1:错误(需检查errno)
  1. lseek() - 文件指针导航
// 定位到文件末尾
off_t pos = lseek(fd, 0, SEEK_END);
  • 特殊用法:
    • lseek(fd, 0, SEEK_CUR) 获取当前位置
    • lseek(fd, -100, SEEK_END) 倒数第100字节
  1. close() - 资源释放
if (close(fd) == -1) {
    perror("关闭文件失败");
}
  • 未关闭的文件描述符会导致资源泄漏
  • 进程退出时自动关闭,但显式关闭是良好习惯

四、深入理解要点

  1. 文件描述符本质

    • 非负整数,进程级文件表索引
    • 0:stdin, 1:stdout, 2:stderr
  2. 缓冲机制差异

    • 标准库函数(fread/fwrite)带用户缓冲
    • 系统调用直接内核交互,更底层高效
  3. 错误处理模式

    if ((fd = open(...)) == -1) {
        perror("open failed");
        exit(EXIT_FAILURE);
    }
    

五、典型应用场景

  • 日志滚动记录(结合O_APPEND)
  • 大文件随机访问(lseek定位)
  • 设备文件操作(如操作/dev/uinput)
  • 文件锁实现(配合fcntl)

建议通过strace工具观察系统调用执行过程:

$ strace -e trace=open,read,write ./file_demo

file_demo.c

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    int fd = open("demo.txt", O_RDWR | O_CREAT, 0644);
    if (fd == -1) {
        perror("open");
        exit(EXIT_FAILURE);
    }

    const char *msg = "Hello POSIX!\n";
    write(fd, msg, strlen(msg));

    lseek(fd, 0, SEEK_SET); // 重置文件指针

    char buf[256];
    ssize_t len = read(fd, buf, sizeof(buf));
    write(STDOUT_FILENO, buf, len); // 输出到终端

    close(fd);
    return 0;
}

FO 是一个文件描述符,它应该之前已经通过 open 函数打开了一个文件,并且获得了该文件的文件描述符。
0 是偏移量,表示不移动位置。
SEEK_SET 是基准点,表示从文件开头开始计算偏移量。

终端操作

# 编译执行
$ gcc -o file_demo file_demo.c
$ ./file_demo
Hello POSIX!

# 查看生成文件
$ ls -l demo.txt
-rw-r--r-- 1 user group 13 Jun  1 10:00 demo.txt

参考逻辑

  1. 打开文件
  2. 异常处理
  3. 写入文件
  4. 读取文件
  5. 关闭文件
内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设备的远程管理、交换机与路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用与配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池与全局池)、NAT转换(静态与动态)、静态路由、RIP与OSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分与基本安全策略配置。; 适合人群:具备一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准备参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换与路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建与调试;③通过命令示例熟悉华为设备CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为主,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设备型号间的命令差异。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世转神风-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值