C语言 linux文件操作(二)

文章目录

    • 一、获取文件长度
    • 二、追加写入
    • 三、覆盖写入
    • 四、文件创建函数creat

一、获取文件长度

通过lseek函数,除了操作定位文件指针,还可以获取到文件大小,注意这里是文件大小,单位是字节。例如在file1文件中事先写入"你好世界!",那么在gbk编码的情况下,一个中文字符占3个字节,获取到的文件大小就是3*5=15字节。
在这里插入图片描述

上述代码如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main()
{
	int fd;
	char *buf = "chenLichen hen shuai!";	

	fd = open("./file1",O_RDWR);

	int filesize = lseek(fd, 0, SEEK_END);
	printf("file's size is:%d\n",filesize);
	close(fd);

	return 0;
}


二、追加写入

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int fd; // 声明文件描述符变量
    char *buf = "chenLichen hen shuai!"; // 声明一个字符串指针,并赋值一个字符串常量

    // 以读写和追加方式打开(如果文件不存在则创建)名为 "file1" 的文件
    fd = open("./file1", O_RDWR | O_APPEND);

    // 打印文件打开是否成功的信息和文件描述符
    printf("open success : fd = %d\n", fd);

    // 将字符串 buf 中的内容写入到打开的文件中
    int n_write = write(fd, buf, strlen(buf));
    if (n_write != -1) {
        printf("write %d byte to file\n", n_write); // 打印成功写入文件的字节数
    }

    close(fd); // 关闭文件描述符对应的文件

    return 0;
}

这段代码的主要操作包括:

  1. 文件打开:

    • 使用 open 函数以读写和追加的方式打开名为 “file1” 的文件,如果文件不存在则创建。
    • O_RDWR 标志表示以读写方式打开文件,O_APPEND 标志表示在文件末尾追加数据。
  2. 写入文件:

    • 将字符串 “chenLichen hen shuai!” 的内容写入到打开的文件中。
    • 使用 write 函数将数据写入文件,并获取成功写入的字节数。
  3. 文件关闭:

    • 使用 close 函数关闭文件描述符,释放相关资源。

这段代码的目的是打开一个文件,将指定的字符串内容追加到文件末尾,并输出写入文件的字节数。

三、覆盖写入

以下是代码的注释和解释:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int fd; // 声明文件描述符变量
    char *buf = "test"; // 声明一个字符串指针,并赋值一个字符串常量

    // 以读写和截断方式打开(如果文件不存在则创建)名为 "file1" 的文件
    fd = open("./file1", O_RDWR | O_TRUNC);

    // 打印文件打开是否成功的信息和文件描述符
    printf("open success : fd = %d\n", fd);

    // 将字符串 buf 中的内容写入到打开的文件中
    int n_write = write(fd, buf, strlen(buf));
    if (n_write != -1) {
        printf("write %d byte to file\n", n_write); // 打印成功写入文件的字节数
    }

    close(fd); // 关闭文件描述符对应的文件

    return 0;
}

这段代码的主要操作包括:

  1. 文件打开:

    • 使用 open 函数以读写和截断的方式打开名为 “file1” 的文件,如果文件不存在则创建。
    • O_RDWR 标志表示以读写方式打开文件,O_TRUNC 标志表示清空文件内容(截断文件)。
  2. 写入文件:

    • 将字符串 “test” 的内容写入到打开的文件中。
    • 使用 write 函数将数据写入文件,并获取成功写入的字节数。
  3. 文件关闭:

    • 使用 close 函数关闭文件描述符,释放相关资源。

这段代码的目的是打开一个文件,在以读写方式打开文件的同时将文件内容清空,然后将字符串 “test” 写入文件,并输出写入文件的字节数。

四、文件创建函数creat

以下是代码的注释和解释:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int fd; // 声明文件描述符变量
    char *buf = "test"; // 声明一个字符串指针,并赋值一个字符串常量

    // 使用 creat 函数创建一个文件 "/home/CLC/file1",并设置文件权限为用户可读、写和执行
    fd = creat("/home/CLC/file1", S_IRWXU);

    return 0;
}

这段代码的主要操作包括:

  1. 文件创建:

    • 使用 creat 函数创建一个文件 “/home/CLC/file1”。
    • creat 函数是一个对 open 函数的封装,用于创建文件,如果文件已存在,则将其截断为空文件。
    • S_IRWXU 是文件权限参数,表示用户(拥有者)具有读、写和执行权限。
  2. 文件描述符:

    • creat 函数成功创建文件后,会返回一个文件描述符 fd
    • 在这段代码中并未进行其他文件操作,所以文件描述符没有被使用到其他操作中。

这段代码的目的是使用 creat 函数创建一个名为 “/home/CLC/file1” 的文件,并将文件权限设置为用户可读、写和执行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧工地云平台源码 支持二次开发、支持源码交付

智慧工地利用移动互联、物联网、云计算、大数据等新一代信息技术&#xff0c;彻底改变传统施工现场各参建方的交互方式、工作方式和管理模式&#xff0c;为建设集团、施工企业、监理单位、设计单位、政府监管部门等提供一揽子工地现场管理信息化解决方案。 通过人员管理、车辆管…

c++ 静态联编+动态联编 (多态)

静态多态 动态多态 1&#xff09;静态多态和动态多态的区别就是函数地址是早绑定(静态联编)还是晚绑定(动态联编)。 如果函数的调用&#xff0c;在编译阶段就可以确定函数的调用地址&#xff0c;并产生代码&#xff0c;就是静态多态(编译时多态)&#xff0c;就是说地址是早绑定…

HTML+CSS+JavaScript制作电子时钟

一 效果展示 二 步骤 在网上下载0-9的jpg图片&#xff0c;将其复制粘贴到项目images文件中&#xff0c;注意&#xff0c;图片的命名一定是数字形式&#xff0c;例如&#xff1a;1.jpg&#xff0c;风景图也是自行下载然后粘贴到相应的文件。 三 代码实现…

【Docker】添加指定用户到指定用户组

运行Docker ps命令&#xff0c;报错&#xff1a;/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied 创建docker用户组 安装docker时默认已经创建好 sudo groupadd docker添加用户加入docker用户组 此处以用户user为例 sudo usermo…

生意不好做?不妨去“私域”找找机会

站在2023年的尾巴上向前看&#xff0c;零售从业者们心里都有同样的疑问&#xff1a;2024年消费还能好么&#xff1f;增长的机会又在哪里&#xff1f; “我会说&#xff1a;要有信心&#xff0c;消费行业永远年轻。”经济学家香帅在企业微信举办的“2023实干企业家峰会消费专场…

六、从0开始卷出一个新项目瑞萨RZN2L之loader app分离工程优化

六、loader app分离工程 6.1 概述 6.2 官方资料与不足 6.3 loader app分离工程的优化 6.3.1 自动调节合并appsection 6.3.2 loader中使用外设 6.3.3 app使用sram mirror 6.3.4 sram atcm同时使用 六、从0开始卷出一个新项目之瑞萨RZN2L loader…

决心解开软光栅的心结

最近几天离职在家,是的,还没回老家.白天周中的时候写这个软光栅化渲染器.包括在上班的最后项目大家都不干活的时候我已经开始写了.到今天上午总算是有的看了.细节还差很多,下午把透视校正插值加上,下午加不完就元旦假期之后再说(元旦我要写pbrt的读书笔记).还有摄像机裁剪,背面…

【Vue2 + ElementUI】el-table中校验表单

一. 案例 校验金额 阐述&#xff1a;校验输入的金额是否正确。如下所示&#xff0c;点击【编辑图标】会变为input输入框当&#xff0c;输入金额。当输入框失去焦点时&#xff0c;若正确则调用接口更新金额且变为不可输入状态&#xff0c;否则返回不合法金额提示 <templat…

proE各版本安装指南

下载链接 https://pan.baidu.com/s/1BSaJxvPPGeIa4YKm7xk57g?pwd0531 1.鼠标右击【Proe5.0M280(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Proe5.0M280(64bit)】&#xff08;解压的路径中不能有中文&#xff09;。 2.打开…

BIT-666 的 2023 年度总结

<<< 年度总结 >>> <<< 年度数据 >>> ◆ 发博情况 ◆ 学习成就 ◆ 代码提交 ◆ 博文表现 <<< 年度创作 >>> ◆ LLM - LLaMA2 <<< 年度风景 >>> ◆ 春 - 中关村软件园 - 百望山 ◆ 夏 - 乌兰…

Gamma LUT PG285笔记

1 gamma校正应用背景 探测器响应为线性亮度或RGB值&#xff0c;而显示器并非线性&#xff0c;需要算法做校正。 2 reg 可以配置3张LUT表&#xff0c;每张表最大1024个16bit参数。表中0x0800仅是第一张表的起始地址&#xff0c;地址每次加4。 3 数据输入的格式 按照RBG的顺序…

springboot参数校验常用注解及分组校验

一、使用方式添加Validated 二、常见注解 Null 被注解的元素必须为null NotNull 被注解的元素必须不为null NotBlank 只能作用在接收的 String 类型上&#xff0c;注意是只能&#xff0c;不能为 null&#xff0c;而且调用 trim() 后&#xff0c;长度必须大于 0即&#xff…

Solana 与 DePIN 的双向奔赴,会带来 DePIN 之夏吗?

作者&#xff1a;LBank Labs 研究员 F.F 编译&#xff1a;TinTinLand 原文&#xff1a;https://medium.com/lbanklabs/new-anchor-of-solana-depin-b674d04d6980 太长不看版 在过去的一年里&#xff0c;我们观察到 Solana 和 DePIN 两者都呈现出了显著的增长。这不仅是极客科…

Ubuntu22.04-安装后Terminal无法调出

参考&#xff1a; Ubuntu20.04 终端打开不了的问题排查_ubuntu终端打不开-CSDN博客 https://blog.csdn.net/u010092716/article/details/130968032 Ubuntu修改locale从而修改语言环境_ubuntu locale-CSDN博客 https://blog.csdn.net/aa1209551258/article/details/81745394 问…

为什么ChatGPT采用SSE协议而不是Websocket?

在探索ChatGPT的使用过程中&#xff0c;我们发现GPT采用了流式数据返回的方式。理论上&#xff0c;这种情况可以通过全双工通信协议实现持久化连接&#xff0c;或者依赖于基于EventStream的事件流。然而&#xff0c;ChatGPT选择了后者&#xff0c;也就是本文即将深入探讨的SSE&…

私域营销新趋势:电商品牌如何打破传统,实现共赢?

一、自私的私域 私域运营已经成为企业营销的重要手段之一&#xff0c;越来越多的品牌开始重视私域的构建和运营。瑞幸咖啡、熊猫不走和泡泡玛特等品牌的成功案例证明了私域运营的重要性和价值。这些品牌通过建立自己的用户社区&#xff0c;提供个性化的服务和营销策略&#xf…

Zabbix“专家坐诊”第221期问答汇总

问题一 Q&#xff1a;使用官方docker模板Template App Docker&#xff0c;监控docker镜像&#xff0c;有一项监控项docker.data_usage有报错&#xff0c;不知道哪里问题&#xff1a;Cannot fetch data: Get “http://1.28/system/df”: context deadline exceeded (Client.Time…

WebGL技术的应用场景

WebGL&#xff08;Web Graphics Library&#xff09;是一种在Web浏览器中渲染3D图形的技术&#xff0c;它基于OpenGL ES&#xff08;OpenGL for Embedded Systems&#xff09;标准&#xff0c;允许通过JavaScript编写高性能的3D图形应用。以下是一些WebGL技术的应用场景&#x…

iptables防火墙——学会利用SNAT和DNAT 共享上网并发布内网服务器

本章展示&#xff1a; -- 学会利用SNAT策略共享上网 -- 学会利用DNAT策略发布内网服务器 -- 学会编写简单的防火墙脚本 3.1 SNAT 策略及应用 Linux 防火墙在很多时候承担着连接企业内、外网的重任&#xff0c;除了提供数据包过滤功能以 外&#xff0c;还提供一些基本的网关…

免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼

在音视频领域&#xff0c;把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有原始工程文件的情况下&#xff0c;将其还原和分离是一件很有难度的事情。 言及背景音人声分离技术&#xff0c;就不能不提Spleeter&#xff0c;它是一种用…