Linux下文件的创建写入读取编程

这篇具有很好参考价值的文章主要介绍了Linux下文件的创建写入读取编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在linux下操作一个文件,首先要保证文件的存在(不存在就创建),接着打开文件(打开成功)并得到文件描述符,接着在进行读写操作,最后还需要关闭文件。如果我们对文件进行读写之后不关闭文件,而直接关闭我们的编译器,可能会造成文件损坏。

         文件描述符其实就是我们使用open函数后一个返回值,我们一般用fd表示。如果你成功的打开文件,open就会返回一个非负值,我们让fd等于这个非负值;如果你打开文件失败,open就会返回-1,那么fd就被赋值为-1。

         如果说我们的文件夹是一本书,文件是书本的章节,那么文件描述符就相当于我们书本的索引(就是一个目录,标示了你想要找的东西的位置)。当你想要读写文件的内容时,你需要利用相应的API函数,而这些API函数的其中一个参数就是文件描述符。API函数通过“文件描述符”这个索引就可以找到文件并对该文件进行操作。

一、Linux常用操作命令

Ctrl Alt t

开启命令窗口

xrandr

显示所有的分辨率

xrandr -s 分辨率

设置自己想要的分辨率

Ctrl l

清屏

Ctrl shift +或者Ctrl +

放大文字

Ctrl -

缩小文字

pwd

显示当前文件路径

ls

显示当前路径下有哪些文件(不包含隐藏文件)

ls -a

显示当前路径下有哪些文件(包含隐藏文件)

ls -l

显示当前路径下文件的创建时间大小及用户使用权限

mkdir 文件夹名

创建文件夹

rm -r 文件夹名

删除文件夹

rm 文件名

删除文件

cd 文件夹名

进入文件夹

cd ..

返回上一级目录

mv *c 新文件夹名

把当前目录下名字以c结尾的文件或文件夹剪切到新文件夹里

mv 文件名1 文件名2

把文件1的名字命名为文件2

mv 文件夹名1 文件夹名2

把文件夹1的名字命名为文件夹2

cp 文件1 文件2

把文件1的内容复制到文件2

cp -r 文件夹1 文件夹2

把文件夹1的内容复制到文件夹2

vi 文件名.c

创建.c文件,进入后默认为命令行模式,按i进入输入模式;按Esc由输入模式进入命令模式。接着输入:wq回车,保存退出。

gcc 文件名.c

编译该.c文件,默认生成名为a.out的可运行文件

./a.out

运行a.out文件

gcc 文件名.c -o 新文件名

编译该.c文件,生成以新文件命名的可运行文件

./新文件名

运行新文件名的文件

vim -r 文件名

打开上一次奔溃的文件

vimdiff 文件名1 文件名2

在同一显示屏下比较两个文件,并显示不同的部分

clear

清屏

ps -aux

查看所有进程

cat 已有文件名

查看文件内容

cat > 新文件名

创建新文件,可以再文件里写入内容,按ctrl c退出

ps -aux|grep 类型名

查看这一类型的进程

top

查看任务管理器

getpid

获取自身进程id号

getppid

获取父进程id号

二、相关API函数

1.创建/打开文件

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

int creat(const char *pathname, mode_t mode);

参数

Pathname:要打开的文件名字(包含路径,缺失为当前路径)

Flags:

必须要有的选项,三选一

O_RDONLY 只读打开   O_WRONLY 只写打开   O_RDWR可读可写打开

备用常用选项,可用“|”叠加

O_CREAT:若文件不存在则创建该文件。使用后,要搭配第三个参数mode,以此来说明该新文件的存取许可权限。

O_EXCL:如果同时指定了O_CREAT,并且文件已经存在则打开文件失败,返回-1。

O_APPEND:每次书写都加到文章末尾

O_TRUNC:如果该文件已经存在,并且是一个常规文件,并且访问模式允许写入(即,是O_RDWR或O_WRONLY)它将被截断为长度0。

Mode:在flag中使用了O_CREAT标志后,可以使用该参数设置待创建文件的访问权限

关于mode的参数补充

每个Linux文件具有四种访问权限:可读(r)、可写(w)、可执行(x)和无权限(-)。

利用ls -l命令可以看到某个文件或目录的权限,它以显示数据的第一个字段为准。第一个字段由10个字符组成,如 -rwxr-xr-x,我们把它划分为4部分

第1位为第一部分,表示文件类型,-表示文件,d表示目录

第2-4位为第二部分,表示文件所有者的权限,u权限

第5-7位为第三部分,表示文件所有者所属组成员的权限,g权限

第8-10位为第四部分,表示所有者所属组之外的用户的权限,o权限  

2-10位的权限总和有时称为a权限

以上例子中,表示这是一个文件(非目录),文件所有者具有读、写和执行的权限,所有者所属组成员和所属组之外的用户具有读和执行的权限而没有写的权限。

如果我们使用int open(const char *pathname, int flags, mode_t mode)函数参数mode是数字,那我们如何用数字表示第二第三第四部分的权限呢?

所谓数字表示法,是指将r、w和x分别用4、2、1来代表,没有授予权限的(即-)则为0,

比如我们刚刚举得例子rwxr-xr-x,它的2到10位一共三个部分的权限,我们划分来看。

第二部分是rwx,对应数字是421,加起来就是7;第三部分是r-x,对应数字是401,加起来就是5;第四部分是rwx,对应数字是401,加起来就是5。所以如果mode用数字表示就是755,具体的例子,下面的程序再说。

如果打开成功,返回新的文件描述符(一个非负整数),如果发生错误,一般返回-1。

与②API函数的区别在有无mode,而需不需要mode这个参数,就要看第二个参数里是否包含O_CREAT。如果有O_CREAT,就要包含mode这个参数;如果没有,就不用包含这个参数。因为如果包含O_CREAT同时文件没有,那么文件就需要被创建,被创建的同时还需要规定文件的访问权限,这就需要mode的参与。

这个API函数可以直接去输入你想要的文件名,以及权限,就可以实现文件的创建了

2.写入文件

ssize_t write(int fd, const void *buf, size_t count);

参数:

fd:文件打开后对应的文件描述符

buf:写入内容缓冲区

count:写入文件的大小

如果写入成功,则返回写入的字节数。如果出现错误,则返回-1,并设置errno以指示错误的原因。

3.读文件

ssize_t read(int fd, void *buf, size_t count);

参数:

fd:文件打开后对应的文件描述符

buf:读内容缓冲区

count:读入文件的大小

如果写入成功,则返回读的字节数。如果出现错误,则返回-1,并设置errno以指示错误的原因。

4.文件光标移动

off_t lseek(int fd, off_t offset, int whence);

参数:

fd:文件打开后对应的文件描述符

offset:相对于whence偏移的位置。0,不偏移;正整数,向右偏移对应的大小;负整数,向左偏移对应的大小。

whence:光标起始位置,一共有三个选项,如下

SEET_SET         文件开头

SEET_CUR         文件当前位置

SEET_END         文件尾部

如果成功,则返回相对于文件头的偏移量。如果出现错误,则返回-1。如果我们设置为

lseek(fd,0,SEET_END)就可以利用他的返回值来表示文件的大小了。

5.关闭文件

⑦int close(int fd);

参数

fd:文件打开后对应的文件描述符

关闭成功返回零。如果出现错误,则返回-1,并适当地设置errno。

三、API函数的功能验证

1.文件创建的验证

   在当前目录下,我们是没有file1文件的,这时候我们建立demo1.c,使用int open(const char *pathname, int flags)无法打开file1。如下图

当前文件下无file1

Linux下文件的创建写入读取编程,linux,文件操作

demo1.c的代码

Linux下文件的创建写入读取编程,linux,文件操作

执行完demo1.c,文件描述符fd的返回值是-1,说明打开文件失败

Linux下文件的创建写入读取编程,linux,文件操作

建立demo2.c使用int open(const char *pathname, int flags, mode_t mode)先进行判断,如果没有file1,显示失败时的文件描述符,接着建立file1后在显示正确的文件描述符;如果有file1,直接显示正确的文件描述符。

demo2.c代码,

Linux下文件的创建写入读取编程,linux,文件操作

执行完demo2.c后的情况,可以看到file1从无到有,通过O_CREAT实现了file1的创建,最后的文件描述符为正值。

Linux下文件的创建写入读取编程,linux,文件操作

Linux下文件的创建写入读取编程,linux,文件操作

当前路径下输入ls -l可以查看当前路径下所有文件的权限以及状态。在demo2.c里我们将open函数的第三个参数mode设置为0600,可以看到对应的file1是对应的权限是

-rw-------,结合我们上文讲的数字表示文件权限就可以知道0600就代表者第二部分拥有可读可写的权限

Linux下文件的创建写入读取编程,linux,文件操作

2.文件写入验证

首先我们删除file1,在demo3.c里使用write函数,写入yangdong is handsome

demo3.c的代码如下

Linux下文件的创建写入读取编程,linux,文件操作

执行完demo3.c后结果如下图所示

Linux下文件的创建写入读取编程,linux,文件操作

打开file1后可以看到文件显示的内容

Linux下文件的创建写入读取编程,linux,文件操作

3.文件读取的验证

在demo3.c的基础上修该代码,首先我们要通过文件描述符的值验证file1中是否写成功入了内容。当成功写入后,我们要调用lseek()函数把文件光标置前,不然我们读取内容的时候是从文件的末尾读取的,但是你可以想象,既然文件光标都到文章末尾了,都没东西了,那你还读啥?读空气啊。所以当你往文章里写好东西之后,如果你想要读,记得把文件光标置前。

我们依旧先删除file1,在demo4.c里使用write,lseek,read函数,写入yangdong is handsome

demo4.c的代码如下

Linux下文件的创建写入读取编程,linux,文件操作

Linux下文件的创建写入读取编程,linux,文件操作

执行完demo4.c后的现象,我们可以看到写入多少,读出多少;写入什么,读出什么。

Linux下文件的创建写入读取编程,linux,文件操作

4.open函数打开文件中参数flag中可搭配选项的验证

O_EXCL功能的验证

file1此时已存在,我们可以看到demo5.c的open函数中同时加入了O_CREAT和O_EXCL,这时候文件打开失败,文件描述符被赋值为-1。

Linux下文件的创建写入读取编程,linux,文件操作

demo5.c的代码

Linux下文件的创建写入读取编程,linux,文件操作

demo5.c的运行结果

Linux下文件的创建写入读取编程,linux,文件操作

O_APPEND的验证

现在file1里面的内容是yangdong is handsome,如果想在文件中继续写入123456。但是我们在open函数里不加参数O_APPEND和加O_APPEND有啥区别呢,下面我们来看一下。

open函数里不加O_APPEND

原文件内容如下

Linux下文件的创建写入读取编程,linux,文件操作

代码如下

Linux下文件的创建写入读取编程,linux,文件操作

运行完之后file1的内容如下

Linux下文件的创建写入读取编程,linux,文件操作

我们可以看到,不过open函数里不加O_APPEND,那么我们写入文件的内容就会写入多少,覆盖原文件多少。

现在在现有file1的基础上验证open函数里加O_APPEND的情况

原文件内容如下

Linux下文件的创建写入读取编程,linux,文件操作

代码如下

Linux下文件的创建写入读取编程,linux,文件操作

运行结果如下,我们可以看到open函数里加O_APPEND后,写入的内容是从文件末尾新加进去,并没有覆盖原文件内容

Linux下文件的创建写入读取编程,linux,文件操作

验证O_TRUNC:

现在file1的内容如下

Linux下文件的创建写入读取编程,linux,文件操作

当我们在open函数中加入参数O_TRUNC以后,我们往文件中写入内容,原文件的内容会被全部删除,只显示我们新写入的东西。

代码如下

Linux下文件的创建写入读取编程,linux,文件操作

运行后file1中的内容如下,可以看到原来的内容已经被替换成了abcdefg文章来源地址https://www.toymoban.com/news/detail-799486.html

到了这里,关于Linux下文件的创建写入读取编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 文件处理完全指南:创建、读取、写入和删除文件详细解析

    文件处理是任何应用程序的重要部分。Java 提供了许多用于创建、读取、更新和删除文件的方法。 Java 文件处理 Java 中的文件处理主要通过 java.io 包中的 File 类完成。该类允许我们处理文件,包括创建、读取、写入和删除文件。 要使用 File 类,我们首先需要创建该类的对象,

    2024年03月18日
    浏览(53)
  • Unity3D操作数据之Txt文档操作(创建、读取、写入、修改)

    Unity3D操作数据之Txt文档操作(创建、读取、写入、修改) 其实读取Txt文档非常简单、也不需要导入 插件 ,仅需引入相应的 命名空间 即可。 命名空间: using System.IO 要注意的一点是,文档格式设置为UTF-8,不然中文可能显示不太正确。 使用写入语句会自动创建对应的文档 使用

    2024年02月02日
    浏览(50)
  • Unity3D操作数据之Excel表操作(创建、读取、写入、修改)

    叨唠两句: 首先使用Excel需要 导入插件 ,其次在 程序运行 期间不要打开对应的Excel文件 其次相对于一些程序使用Excel比使用数据库更具有优势 读取主要使用 Epplus 插件,后续会推出关于Epplus的 AP I讲解 读取Excel文件,需要导入一些dll文件,才能进行操作Excel数据: 如果打包

    2024年02月05日
    浏览(56)
  • Python08--文件读取及写入操作

    有些时候我们在处理数据之后就会想将我们的数据保存到文件中,实现数据的持久化。而不仅仅是输出到我们的集成开发环境的控制台上(直接打印在控制台上并不能够实现保存我们数据的功能,只要我们的集成开发环境已关闭,或者是电脑关机,那么我们打印出来的数据也

    2024年02月05日
    浏览(81)
  • Python操作写入/读取csv文件

    网络工程师Python数据存储(第1节,CSV文件) 网络自动化运维演进的一个方向大致过程:网络工程师从关注配置制作脚本,完成后上设备刷配置,慢慢地演化为网络工程师关注和确定设备配置的某些重要控制参数,而把制作脚本任务交给Jinja2等去渲染生成,把下发脚本工作交

    2024年02月03日
    浏览(41)
  • 日志审计系统Agent项目创建——读取日志文件(Linux版本)

      紧接着上一篇的分享,继续做日志文件的读取,点击连接即可 日志文件初始化 https://blog.csdn.net/wjl990316fddwjl/article/details/135553238 完结!!!!

    2024年01月22日
    浏览(35)
  • C++对txt文件的写入读取操作

    摘自c++中文网 ifstream 是输入文件流(就是通过它定义的对象获取文件中的内容) ofstream 是输出文件流(将内容写入文件) 注意 :要使用输入输出文件流要包含头文件 #includefstream 首先要用 ofstream 定义一个输入对象 ofstream outf; 这里的outf可以自定义 接着用 outf.open(文件路径) 打

    2024年02月13日
    浏览(42)
  • uniapp安卓读取或写入txt文件,创建文件或文件夹,获取手机内置存储根路径

    原理:利用 H5plus 的 native ,引入 java 类来进行处理。 uniapp开发记录

    2024年02月11日
    浏览(43)
  • Linux :: 文件内容操作【5】:echo 指令 与 输入重定向、输出重定向、追加重定向在文件内容写入中的简单用法!

    前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C++ 入门到入土!!!学习合集 Linux 从命令到网络再到内核!学习合集 说明:此处结合 「echo 指令」 提前引入 「重定向」 及 「管道」 的简单用法,深入的 「重定向」

    2024年02月01日
    浏览(42)
  • ubuntu学习(四)----文件写入操作编程

    ssize_t write(int fd,const void*buf,size_t count); 参数说明:   fd:是文件描述符(write所对应的是写,即就是1)   buf:通常是一个字符串,需要写入的字符串   count:是每次写入的字节数 返回值:  成功:返回写入的字节数  失败:返回-1并设置errno   ps: 写常规文件时,write的返回值

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包