IO进程(学习)2024.8.15

news2024/11/13 6:58:42

目录

重定向打开文件

文件IO

概念

特点

函数

1.打开文件

2.关闭文件

3.读写文件

read

write

4.文件定位操作

重定向打开文件

FILE * freopen(const char *pathname,  const char *mode,  FILE* fp)
功能:将指定的文件流重定向到打开的文件中
参数:path:文件路径
           mode:打开文件的方式(同fopen)
           fp:文件流指针
返回值:成功:返回文件流指针
              失败:NULL

freopen案例: 

#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("hello\n");

    freopen("./test.c", "w", stdout);
    printf("world\n");

    freopen("/dev/tty", "w", stdout);   //  /dev/tty表示终端

    printf("hello world\n");
    return 0;
}

文件IO

概念

在可移植操作系统接口中定义的一组输入输出的函数

特点

1.没有缓冲机制,每次操作都会经过系统调用,效率比较低
2.围绕文件描述符,文件描述符是非负整数,0、 1、 2
3.默认打开三个文件描述符,0(标准输入)、1(标准输出)、2(标准错误)
4.除目录外其他任意类型文件都可以操作

函数

1.打开文件

#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags, ...);
功能:打开文件
参数:pathname:文件路径名
           flags:打开文件的方式
                   O_RDONLY:只读
                   O_WRONLY:只写
                   O_RDWR:可读可写
                   O_CREAT:创建
                   O_TRUNC:清空
                   O_APPEND:追加
返回值:成功:文件描述符
              失败:-1

当第二个和参数存在O_CREAT,我们就需要写第三个参数:你要创建文件的权限

open案例:

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char const *argv[])
{

    int fd, fd1;
    fd = open("./test.c", O_CREAT | O_RDONLY | O_TRUNC, 0666);

    if (fd < 0)
    {
        perror("open err");
        return -1;
    }

    printf("fd:%d\n", fd);
    return 0;
}

实际文件权限计算方式:指定的权限值 & (~umask),umask=002

补充

1.当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定创建文件的权限 ,open(file, xx|O_CREAT|xx, 0666);
2.实际创建出来的文件权限为:指定权限值&(~umask)  //umask为文件权限掩码,通过umask命令可以查看
3.打开文件方式对应表:

2.关闭文件

int close(int fd);
参数:fd:文件描述符

close示例:

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char const *argv[])
{

    int fd;
    fd = open("./test.c", O_CREAT | O_RDONLY | O_TRUNC, 0666);

    close(fd);
    return 0;
}

3.读写文件

read

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:从一个已打开的可读文件中读取数据
参数:fd  文件描述符
           buf  存放位置
           count  期望的个数
返回值:成功:实际读到的个数
              返回-1:表示出错,并设置errno号
              返回0:表示读到文件结尾

write

ssize_t write(int fd, const void *buf, size_t count);
功能:向指定文件描述符中,写入 count个字节的数据。
参数:fd   文件描述符
          buf   要写的内容
          count  期望值
返回值:成功:实际写入数据的个数
              失败  : -1

 补充:在读和写一起使用时,一般write的字符个数指定为read的返回值,“读多少写多少”

读写文件案例:

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{
    int fd;
    char buf[32] = {""};
    fd = open("./test.c", O_RDWR);
    if (fd < 0)
    {
        perror("open err");
        return -1;
    }
    printf("fd:%d\n", fd); // 3

    write(fd, "hello", 5);
    lseek(fd, 0, SEEK_SET);
    // 不同于标准I0,文件I0是指定多少个字符就获取多少个字符
    ssize_t s = read(fd, buf, 5);
    printf("%s\n", buf);
    printf("%ld\n", s); // 打印的是实际获取到的字符个数

    // 关闭文件
    close(fd);
    return 0;
}

4.文件定位操作

#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
功能:设定文件的偏移位置
参数:fd:文件描述符
           offset偏移量  
           正数:向文件结尾位置移动
           负数:向文件开始位置
           whence  相对位置
                  SEEK_SET   开始位置
                  SEEK_CUR   当前位置
                  SEEK_END   结尾位置
返回值:成功:文件的当前位置

lseek案例:

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{
    int fd;
    char buf[32] = "";
    fd = open("./test.c", O_RDWR | O_TRUNC);
    if (fd < 0)
    {
        perror("open err");
        return -1;
    }
    // 相对于开头偏移10个字符
    lseek(fd, 10, SEEK_SET);
    write(fd, "a", 1);

    off_t s = lseek(fd, 0, SEEK_END);
    printf("%ld\n", s);

    // 关闭文件
    close(fd);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

离散数学概论

目录 一、引言 二、离散数学的主要内容 1. 集合论 1.1 集合的基本概念 1.2 集合的运算 集合运算总结表格 2. 数理逻辑 2.1 命题逻辑 2.2 逻辑推理 2.3 逻辑等价 逻辑联结词与逻辑等价总结表格 3. 组合数学 3.1 计数原理 3.2 排列与组合 3.3 容斥原理 组合数学总…

15.基于session实现登录 前端项目部署

前端项目nginx部署 nginx配置文件 worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/json;sendfile on;keepalive_timeout 65;server {listen 8080;server_name localhost;# 指定前端项目所…

手把手教你CNVD漏洞挖掘 + 资产收集

0x1 前言 挖掘CNVD漏洞有时候其实比一般的edusrc还好挖&#xff0c;但是一般要挖证书的话&#xff0c;还是需要花时间的&#xff0c;其中信息收集&#xff0c;公司资产确定等操作需要花费一定时间的。下面就记录下我之前跟一个师傅学习的一个垂直越权成功的CNVD漏洞通杀&#…

【案例42】“”引发的“血案”--建表带双引号

问题现象 数据抽取工具报错。 研发排查后发现&#xff0c;这条语句不执行导致。转来让解决此问题。 问题分析 与研发沟通发现。是因为在user_segments 中一直有FIP_OPERATINGLOG_copy1 造成的。 询问可以直接drop掉相关表&#xff0c; drop table FIP_OPERATINGLOG_copy1 ; …

十一、实现逻辑层

系列文章目录&#xff1a;C asio网络编程-CSDN博客 1、服务器架构设计 2、单例模板类 我们的LogicSystem类为单例类&#xff0c;可以只把这个类写为单例&#xff0c;也可以写一个单例模板类&#xff0c;让其它类继承它就可以形成单例。这里选择第二种&#xff0c;因为后面可能…

Python利用openpyxl复制Excel文件且保留样式—另存为副本(附完整代码)

目录 专栏导读库的介绍库的安装前言结果预览目录结构完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…

配电房动环监控系统 温湿度环境、供配电、UPS集中管控@卓振思众

在现代电力网络中&#xff0c;配电房作为供电系统的核心节点&#xff0c;承担着至关重要的角色。为了保障电力供应的稳定性与可靠性&#xff0c;配电房的管理与监控显得尤为重要。随着技术的不断进步&#xff0c;【卓振思众】智能的配电房动环监控系统应运而生&#xff0c;成为…

# Spring Cloud Alibaba Nacos_配置中心与服务发现(四)

Spring Cloud Alibaba Nacos_配置中心与服务发现&#xff08;四&#xff09; 一、Nacos 配置管理-集群部署 1、 把 nacos 应用程序包&#xff0c;复制3份&#xff0c;分别命名为 nacos1, nacos2, nacos3 分别在 conf 目录下&#xff0c;修改 application.properties 配置文件…

【大模型LLMs】LLMs-based Summarization研究进展梳理

【大模型LLMs】LLMs-based Summarization方法梳理 Survey1 Knowledge Distillation from LLMsRefereeInheritSumm 2 Prompt Engineering2.1 Template EngineeringOdSum 2.2 CoTSumCoTCoDSuReSliSumRefiner 梳理基于大模型的摘要总结方案&#xff0c;持续汇总中&#xff08;更关…

数据埋点系列 9|数据伦理与隐私-在合规与创新间寻找平衡

在数据驱动决策的时代&#xff0c;数据伦理和隐私保护已成为至关重要的议题。组织必须在利用数据创新和保护用户隐私之间找到平衡。本文将探讨数据伦理的核心原则、隐私保护的技术实现&#xff0c;以及如何在合规和创新之间取得平衡。 目录 1. 数据伦理的核心原则1.1 透明度1…

【机器学习】卷积神经网络简介

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 卷积神经网络简介1. 引言2. CNN的基本概念2.1 什么是卷积神经网络2.2 CNN与传统…

uniprot数据库转换ID功能

1.登入uniprot数据库 uniprot 2. 选择ID mapping&#xff0c;输入P31946和P62258等uniprot数据库中的蛋白质ID 然后在To database选项中选择&#xff1a;sequence databases---RefSeq Protein---map 显示已完成&#xff0c;点击ID MAPPING 下方的网址&#xff0c;则可以看到uni…

「12月·长沙」第三届传感、测量、通信和物联网技术国际会议(SMC-IoT 2024)

第三届传感、测量、通信和物联网技术国际会议&#xff08;SMC-IoT 2024&#xff09;将于2024年11月29日-2024年12月1日召开&#xff0c;由湖南涉外经济学院主办。会议中发表的文章将会被收录, 并于见刊后提交EI核心索引。 会议旨在围绕传感、测量、通信和物联网技术等相关研究…

mysql数据库 行级锁,间隙锁和临键锁详解

目录 准备 查看锁命令 演示 普通的select语句 共享锁与排他锁 无索引行锁升级为表锁 间隙锁&临键锁 索引上的等值查询(索引为唯一索引) 索引上的等值查询(索引为普通索引) 索引上的范围查询(唯一索引) 准备 我的mysql版本是8。 CREATE TABLE user (id int unsi…

.NET 8 跨平台高性能边缘采集网关

目录 前言 项目介绍 通道 插件 设备 变量 项目特点 可视化操作 脚本支持 自定义插件支持 性能 断线缓存 完整可商用的边缘网关 项目插件 采集插件 业务插件 项目展示 1、ThingsGateway 演示地址 2、登录页面 3、系统首页 4、网关管理 5、网关状态 6、网关…

【区块链+金融服务】基于区块链的一站式绿色金融开放平台 | FISCO BCOS应用案例

科技的进步为绿色金融发展提供了新的机遇&#xff0c;但银行、企业、第三方金融机构等在进行绿色金融业务操作过程中&#xff0c; 存在着相关系统和服务平台建设成本高、迭代难度大、数据交互弱、适配难等痛点。 基于此&#xff0c;中碳绿信采用国产开源联盟链底层平台 FISCO …

Element-01.快速入门

1.什么是Element 2.快速入门 第二步引入ElementUI组件库&#xff0c;在当前的工程目录下的main.js文件中引入。 import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import App from ./App.vue;Vue.use(ElementUI); 第一…

Heckman 模型及 Stata 具体操作步骤

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 六、代码运行结果 一、文献综述 Heckman 模型自提出以来&#xff0c;在众多领域得到了广泛且深入的应用。例如&#xff0c;在劳动经济学领域&#xff0c;Heckman&#xff08;1979&#xf…

CSS小玩意儿:霓虹灯卡片

一&#xff0c;效果 二&#xff0c;代码 1&#xff0c;搭个框架 主题是一个圆角矩形&#xff0c;其中有垂直、水平居中的文字。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>霓虹灯卡片 - 步骤1…

区块链技术在Facebook中的潜力:未来趋势与挑战

数据安全的新高度 区块链技术以其去中心化和不可篡改的特性&#xff0c;正在成为提升数据安全和隐私保护的重要工具。Facebook作为全球最大的社交媒体平台之一&#xff0c;正积极探索如何将区块链技术应用于其平台&#xff0c;以增强用户数据的安全性和隐私保护。Facebook在应…