linux系统编程——文件编程

【Linux系统编程】文件IO 【Linux系统编程】文件IO(超详细) 阅读详情

linux系统编程——文件编程

一、如何创建、修改一个文件

手动修改文件:打开/创建文件→编辑文件→保存文件→关闭文件
linux中使用编程来操作文件,真正了解如何文件编程是很复杂的,但可以引用系统提供的API

二、linux系统调用的API

API名称操作名手册命令
打开openman 2 open
创建creatman 2 creat
读操作readman 2 read
写操作writeman 2 write
光标定位lseekman 2 lseek
关闭closeman 2 close

三、文件描述符

在这里插入图片描述
文件描述符相当于文件的索引

四、linux系统调用

1、创建文件—creat

引用头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

函数原型:int creat(const char *pathname, mode_t mode);

返回值:整型,作为文件描述符,失败返回-1

pathname:文件名的绝对路径(缺省为当前路径)
mode:创建模式

创建模式宏表示数字访问权限
可读S_IRUSR4
可写S_IWUSR2
可执行S_IXUSR1
可读可写可执行S_IRWXU7

代码示例:

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

int main()
{
	int fd;
        fd = creat("/home/admin_/learn/linux/file3",S_IRWXU);
        //在该路径下,建立一个file3文件,模式为可读可写可执行
        if(fd != -1)
        {
        	printf("create file3 successfully\n");
        }else
        {
        	printf("create file3 fail\n");
        }
        return 0;
}
2、打开文件—open

引用头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

函数原型:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

返回值:整型,作为文件描述符,失败返回-1

pathname:文件名的绝对路径(缺省为当前路径)
flags:参数

flags打开标志
O_RDONLY只读方式打开
O_WRONLY只写方式打开
O_RDWR可读可写方式打开
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
        int fd;
        fd = open("./file2",O_RDWR);
        if(fd != -1)
        {
                printf("open file successfully\n");
        }
        return 0;
}
可选参数作用
O_CREAT若文件不存在则创建它,使用此选项,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限
O_EXCL如果同时指定了OCREAT,而文件已经存在,则出错(打开文件失败,返回值为-1)
O_APPEND每次写时都加到文件的尾端
O_TRUNC打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0

O_CREAT使用:

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

int main()
{
        int fd;
        fd = open("./file2",O_RDWR);//单纯的打开文件
        if(fd == -1)//如果文件不存在
        {
                printf("open file2 fail\n");
                fd = open("./file2",O_RDWR|O_CREAT,0600);//6:可读可写权限=4+2
                if(fd>0)
                {
                	printf("create file2 successfully\n");
                }
        }
        return 0;
}

O_EXCL使用:

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

int main()
{
        int fd;
        fd = open("./file2",O_RDWR|O_CREAT|O_EXCL,0600);
        if(fd == -1)//若file2文件已存在,creat和excl参数会导致open文件描述符返回-1
        {
                printf("file exists\n");
        }
        return 0;
}

O_APPEND使用:

原文件内有内容时,写入数据需要引用O_APPEND参数,使新内容加入到原文件最后

#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="wyplmm\n";
        fd = open("./file1",O_RDWR|O_APPEND);
        printf("open success:%d\n",fd);
        int n_write = write(fd,buf,strlen(buf));
        if(n_write != -1)
                printf("write %d byte to file1\n",n_write);
        close(fd);
        return 0;
}

O_TRUNC使用:
把原文件的内容都删掉才写入

#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="wyplmm\n";
        fd = open("./file1",O_RDWR|O_TRUNC);
        printf("open success:%d\n",fd);
        int n_write = write(fd,buf,strlen(buf));
        if(n_write != -1)
                printf("write %d byte to file1\n",n_write);
        close(fd);
        return 0;
}
3、写操作—write

前提:已经打开了文件
引用头文件:
#include <unistd.h>

函数原型:
ssize_t write(int fd, const void *buf, size_t count);
write的三个参数:文件描述符、无类型的指针(缓冲区)、文件大小

返回值:整型,表示写入的字节数,-1时表示写入失败

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

int main()
{
        int fd;
        char *buf="wyplmm\n";//存放在内存缓冲区
        fd = open("./file1",O_RDWR);
        if(fd == -1)
        {
                printf("open file1 failed\n");
                fd = open("./file1",O_RDWR|O_CREAT,0600);
                if(fd>0)
                {
                        printf("create file1 success\n");
                }
        }//结合了打开和创建文件的操作
	printf("open success:fd=%d\n",fd);
        //ssize_t write(int fd, const void *buf, size_t count);write函数原型
        write(fd,buf,strlen(buf));//buf内容被写进file1
        //sizeof在linux下定义指针变量是8个字节可能无法完全显示输入内容,需要strlen显示实际字符个数
        close(fd);//使用完必须关闭
        return 0;
}

4、读操作—read

前提:已经打开了文件
引用头文件:
#include <unistd.h>

函数原型:
ssize_t read(int fd, void *buf, size_t count);
read的三个参数:fd指向的文件,读取的内容放入buf指向的内存,读取的字节数

返回值:整型,表示读取的字节数,-1表示读取失败

#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="wyplmm\n";
        fd = open("./file1",O_RDWR);
        if(fd == -1)
        {
        	printf("open file1 failed\n");
                fd = open("./file1",O_RDWR|O_CREAT,0600);
                if(fd>0)
                {
                        printf("create file1 success\n");
                }
        }
        printf("open success:fd=%d\n",fd);
  	//ssize_t write(int fd, const void *buf, size_t count);
        int n_write = write(fd,buf,strlen(buf));//返回值为-1时写入失败
        if(n_write != -1)
	{
                printf("write %d type to file1\n",n_write);
        }
        
        char *readBuf=(char *)malloc(sizeof(char)*n_write);//给readBuf开辟空间,防止变成野指针
        //ssize_t read(int fd, void *buf, size_t count);
        int n_read = read(fd,readBuf,n_write);
        printf("read %d byte,content:%s\n",n_read,readBuf);
	close(fd);
        return 0;
}
*************************
结果:
open file1 failed
create file1 success
open success:fd=3
write 13 type to file1
read 0 byte,content:

上述出现的一个问题,无法读取到数据read 0 byte,content内容空

**原因:**因为上述的操作进行了写入操作,写操作完毕后,光标移动到文章的最末尾,因此读操作时读取的是从光标起的空内容。
解决方法:
1、在读操作前关闭再打开文件

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

2、将光标移动前文本前面
光标定位lseek
引用头文件:
#include <sys/types.h>
#include <unistd.h>

函数原型:
off_t lseek(int fd, off_t offset, int whence);
作用:将文件读写指针(光标)相对whence移动offset个字节

宏作用
SEEK_SET指向文件头
SEEK_CUR指向当前位置
SEEK_END指向文件尾
#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="wyplmm\n";
        fd = open("./file1",O_RDWR);
        if(fd == -1)
        {
                printf("open file1 failed\n");
                fd = open("./file1",O_RDWR|O_CREAT,0600);
                if(fd>0)
                {
                        printf("create file1 success\n");
                }
        }
        printf("open success:fd=%d\n",fd);
        //ssize_t write(int fd, const void *buf, size_t count);
        int n_write = write(fd,buf,strlen(buf));
        if(n_write != -1)
        {
                printf("write %d type to file1\n",n_write);
        }
        //close(fd);第一种方法
        //fd = open("./file1",O_RDWR);第一种方法
        lseek(fd,0,SEEK_SET);//等于lseek(fd,-21,SEEK_CUR);
        char *readBuf=(char *)malloc(sizeof(char)*n_write);
        //ssize_t read(int fd, void *buf, size_t count);
        int n_read = read(fd,readBuf,n_write);
        printf("read %d byte,content:%s\n",n_read,readBuf);
        close(fd);
        return 0;
}
5、关闭文件—close

引用头文件:
#include <unistd.h>
函数原型:
int close(int fd);

close(fd);
Linux 系统编程 —— 文件编程 Linux 是什么 -> 操作系统的内核 基于Linux 内核的发布版本:Ubantu、centOs、FreeBSD、Android 计算机系统的架构: 阅读详情

相关推荐

Linux系统环境编程之文件

本文介绍了Linux系统下文件编程的基本操作流程,包括文件创建、读写、光标定位和关闭等API函数的使用方法。主要内容涵盖:1) open函数参数说明及文件权限设置;2) write/read函数实现文件读写;3) lseek函数控制文件指针位置;4) 文件操作的一般步骤及实际应用案例,如实现Linux cp命令、修改配置文件参数以及存储整数、结构体和结构体数组等数据。通过多个C语言代码示例,演示了如何利用系统调用完成文件的自动化操作。

H212202165的博客 1131

Linux系统编程——文件编程

Linux文件编程

qq_52902991的博客 1120

Linux 系统编程之文件编程

Linux 系统编程之文件编程

MRDOCMAN的博客 442

Linux —— 文件编程

Linux文件编程是指在Linux系统中使用编程语言进行文件操作的过程。它涵盖了创建、打开、读取、写入、关闭和删除文件等操作。在Linux中,一切皆文件,包括普通文件、目录、设备文件等。通过文件编程,可以使用各种编程语言(如C、C++、Python等)利用系统提供的接口和函数对这些文件进行操作。

m0_66317799的博客 531

Linux系统编程之文件编程(一)

Linux系统编程之文件编程(一)包括内容:打开/新建文件、读/写文件、关闭文件等。

l_z_y_000的博客 672

用V E S C 6-M K V I 第六代调速控制器给VESC电调刷固件

文章摘要:本文介绍了一款先进的电机控制器,具备多项创新技术。核心亮点包括三相电流/电压检测、四象限无缝运行、多模式兼容等先进电机控制技术,以及智能感知与安全保护、高效能电源管理、多样化连接与扩展功能。此外,该控制器支持实时数据监测与用户交互,具备开源生态和工业级可靠性,适用于电动载具、机器人及工业领域。用户需注意散热要求和兼容性提示,可通过VESC-Tool软件进行灵活配置。产品可在常竹科技淘宝店购买,并加入技术交流群获取支持。

2403_89422757的博客 1366

Linux 创建文件的12种方法总结

命令通常用于脚本、批处理文件。命令可以创建一个新的文件,该命令回车后不会立即结束,可以输入添加到新文件的内容后按 Ctrl+C 或者 Ctrl+D 来结束,也可以使用。通常用于将一个命令的输出重定向到一个新文件中,如果没有命令,则会创建一个 0KB 的空文件。of=文件名:输出文件名,缺省为标准输出。if=文件名:输入文件名,缺省为标准输入。ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

天天的博客 3万+

微信PC端Multi文件夹数据库解析:语音消息导出与转换实战指南

本文提供了一份详细的微信PC端语音消息导出与转换实战指南。通过解析Multi文件夹中的MediaMSG数据库,指导用户定位、解密数据库,并利用Python脚本精准提取SILK格式语音,最终转换为通用的WAV或MP3格式,实现个人语音数据的本地备份与处理。

garlic的博客 583

linux系统编程之文件编程

用一个函数之前我们必须了解其原型,在linux环境下在我们用CTRL+ALT+T调出终端,在终端界面输入man 2 open就可以看到对open函数的说明: 我们在代码上体现一下:打印出来的文件描述符为3,说明成功打开了file1,当然这里是因为我提前用touch file1创建了file1, 那如果文件不存在呢?在原本代码上添加了O_CREAT,并且说明0600权限,其作用就是没有该文件就创建该文件,我先通过rm file1把之前创建的file1给删掉了,在执行修改后的代码,从输出结果可以看

qq_53918454的博客 1594

大话西游2单机版V8一键架设教程:5分钟搞定GM权限和仙玉修改(附完整物品代码表)

本文详细讲解了大话西游2单机版V8的一键架设教程,包括5分钟快速配置GM权限、仙玉修改及物品代码使用技巧。通过分步指导和服务端配置详解,帮助玩家轻松掌握游戏管理功能,重温经典回合制体验。附完整物品代码表,助你快速获取稀有道具和神兽。

weixin_42557830的博客 1234

基于YOLOv8和PaddlepaddleOCR的微信截图聊天记录提取

本文提出了一种基于YOLOv8和PaddleOCR的微信聊天记录提取方法。首先使用YOLOv8n模型分割出聊天气泡(针对深浅色模式分别训练),通过合成数据集增强模型鲁棒性,召回率达0.995。随后采用PP-OCRv5进行文本识别,利用坐标匹配将气泡内文本送入识别队列,短长文本平均置信度分别>0.98和>0.95。文中特别强调了PaddleOCR不同版本的输出格式差异及适配方案,建议使用3.0+版本。该方法有效解决了直接OCR识别易受干扰的问题,通过气泡分割+文本定位的两阶段策略显著提升了识别准确

2401_87383958的博客 2358

【Linux】文件系统编程

1、errno 文件 常见的文件类型 文件描述符 文件操作的一般过程 1、open():打开或创建一个文件 3、write():写文件 4、read():读文件 5、lseek():文件偏移 几乎所有的系统调用或库函数都会返回某种类型的状态值,以表明是否执行成功 当系统调用执行失败,会设置全局整型变量errno的值,以表明具体的出错原因 如果遇到一个函数不会用,可以用m...

三七 2084

联想拯救者恢复出厂设置全攻略

通过本文介绍的几种方法,你可以轻松地将联想拯救者恢复到出厂系统状态。无论是通过Windows恢复选项、高级启动选项还是一键恢复功能,都能帮助你解决系统问题、清除个人信息或重置软件环境。在重置前,请务必备份重要数据,并确保了解重置的影响。重置完成后,进行适当的系统设置和软件安装,让你的联想拯救者焕然一新,继续为你提供高效、稳定的计算体验。

mmoo_python的博客 3252

入门Linux系统编程--文件

文章目录1、文件编程概述2、文件打开及创建3、文件写入操作编程4、文件读取操作5、文件光标移动操作总结 1、文件编程概述 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 2、文件打开及创建 参数说明 #include <sys/types.h> #include <sys/stat.h> #include &l

mantouyouyou的博客 1280

统信UOS V20 安装mysql5.7.42详细教程

到bin/下,执行下面的命令,初始化mysql服务信息,得到数据库的初始密码,实际如果目录不一样记得换成自己的目录。下载后通过远程将安装包上传至服务器,我这里将安装包上传至/usr/local/mysql 下。ps:这时候如果还是不能远程访问的话,可能是防火墙的原因,命令行执行以下命令即可。再次登录,发现缺少 libtinfo.so.5文件,再次建立软连接。登录,发现报错,提示缺少libncurses.so.5文件,使用。创建 /var/lib/ 下mysql目录。登录成功,修改密码,设置远程访问。

为谁伫立在风中 1万+

Python模拟发送SOME/IP消息(Scapy模块)

SOMEIP提供服务、订阅、响应、通知等Python代码示例

liluo0815481的博客 3069

Linux系统编程_文件编程

open/fopen、write/fwrite、read/fread、fputc、fgetc、feof

weixin_45650620的博客 1129

一、【vmware虚拟机使用】安装vmware workstations17

本文介绍了VMware Workstation 17的安装与网络配置方法。主要内容包括:通过下载安装包进行标准安装(含许可协议、路径选择等步骤);重点讲解了NAT模式下的网络配置,包括修改子网IP为192.168.2.0网段、设置网关地址和DHCP范围等操作,以避免与主机网络冲突。文章还简要说明了VMware的Hypervisor核心技术原理,包括CPU、内存和存储虚拟化。最后指出完成这些准备工作后,后续将进行CentOS7系统的安装。整个流程配有详细图文说明,适合初学者跟随操作。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 2746

Linux系统编程:认识文件

1、文件=内容+属性 2、文件分为打开的文件和没打开的文件 (如c中的fopen和fclose) 可以用以下的例子去理解:快递(文件) 有被人(进程)取走的快递(打开的文件)和没被取走的快递(没打开的文件),被人取走的快递研究的是人和快递的关系(进程和文件的关系) ,而没被人取走的快递,他会被暂时安防在菜鸟驿站(磁盘) 他的数量很多(文件非常多) 所以我们打算去取的时候其实我们是会收到一个取件码的(查找该文件的信息) 然后我们根据这个号码比方说3-1113 我们会找到

weixin_51142926的博客 3901

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Linux 系统编程学习之文件编程

Linux 系统编程学习之文件编程 文件描述符 (1)在linux系统中,当打开或者创建一个文件时会返回一个文件描述符,在读写文件时,需要将文件描述符作为参数传递给相应的函数。 (2)文件描述符是一个非负整数,是一个索引值 系统调用–打开(open) #include &amp;amp;lt;sys/types.h&amp;amp;gt; #include &amp;amp;lt;sys/stat.h&amp;amp;gt; #includ...

qq_41954557的博客 251

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux系统编程——文件

如果从文件的指定位置向后偏移过程中已经超过了文件的当前末尾位置,则会自动以'\0'来填充文件内容,从而形成一种被称为"空洞文件" 的特殊文件。offset 要在文件内偏移的距离,单位字节。如果值为整数,则向文件末尾偏移,如果值为负数,则向文件开头偏移。将stream流文件中的文件指针从whence位置开始,偏移offset字节的长度。如果文件不存在,则创建文件。:获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。w+:写读(文件不存在,则创建;w:写(文件不存在,则创建;

m0_62835291的博客 762

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【Linux系统编程】常用头文件

在Linux系统编程中,常用的头文件

lyh030105的博客 765

Linux系统编程第二部分:文件系统

文件系统详解

qq_49354204的博客 1179

Linux文件系统管理编程

Linux文件系统管理编程实验

2301_80823515的博客 1111
上一篇: 虚拟机环境和Windows本机系统的文件共享
下一篇: 主函数参数以及char argv[][]、char * argv[]和char ** argv的区别
admin_小小怪
博客等级 码龄7年 32粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值