栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Linux编程的文件操作部分

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux编程的文件操作部分

前言

        对文件的操作一定要按照打开文件,操作文件,关闭文件的顺序。其中关闭文件最重要。因为文件本身是静态文件,打开文件后会创建动态文件,静态文件的内容就会载到动态文件的buf缓冲区内,对文件的操作都是对buf进行操作。如果不关闭文件就不会同步更新静态文件,关闭文件后就会同步更新静态文件。

目录

        本文讲述Linux下对文件的操作常使用的一些函数:open()函数、close()函数、write()函数、

read()函数、lseek()光标定位函数,以及一些出现的小问题。

open()

close()

write()

read()   

creat()

open()

头文件:  

      #include 
      #include 
      #include 

函数原型:

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

  功能:打开一个文件,会返回一个文件描述符——整型数(file description简称fd),文件描述符贯               穿所有文件操作函数,其他函数可以根据fd来对指定的文件进行访问。

参数说明:

               1.pathname

                        需要打开的文件名字(要包含路径)

                2.flags

                        打开文件的时候,对文件的访问权限,可以传入一个或者两个参数选项。

                        O_RDONLY      只读打开

                        O_WRONLY      只写打开

                        O_RDWR          可读可写打开

                  这三个参数使用时有且只能使用一个(很好理解,你不能可读可写的时候又让它只写)

                        O_CREAT         若文件不能存在则创建。使用此选项时,需要同时说明第三个参数                                                    mode,用其说明新文件的访问权限。    若文件不存在则创建它。

                        O_EXCL            如果指定了O_CREAT|O_EXCL,返回值是-1的话说明文件存在

                        O_APPEND      加上这个参数就可以使得每次写入的东西换行写入下一行中

                        O_TRUNC        加上这个参数就可以把之前的内容清除重新写入最新内容

open()函数的使用要根据应用场景不同来决定使用哪一个,若文件存在就使用第一个,若不存在就是用第二个,flag里需要使用 O_CREAT(例如O_RDWR|O_CREAT),mode记录带创建的文件访问权限。

返回值:

打开成功:返回一个整型数

打开失败:返回-1

close()

头文件:  

       #include 

函数原型:

      int close(int fd);

功能:关闭打开的一个文件。

参数说明:

                fd是open函数返回的文件描述符。

返回值:

关闭成功:返回0

关闭失败:返回-1

注意:打开的文件一定要关闭,否则大量资源被占用,导致内存不够。

write()

头文件:

       #include 

函数原型: 

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

功能:往fd所指的文件中写入内容。白话解释就是取缓冲区buf放的数据count字 节,写入到打开                的文件中。

参数说明:

                1.int fd

                       文件描述符,open函数成功打开后返回的数。

                2.const void *buf

                        无类型的指针,缓冲区用来存放你要写入的内容。

                3.size_t count

                        写入文件的字节数,将缓冲区的数据要写入多少字节。

返回值:

写入成功:返回一个整型数

写入失败:返回-1

read()   

头文件:

         #include 

函数原型:

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

 功能:从fd所指的文件中,读取内容。白话解释就是从fd指的文件中,读出count字节的数据                     存放在buff中。

注:定义buf时要注意野指针的问题,要为buf开辟空间。

参数说明:  

                1.int fd

                       文件描述符,open函数成功打开后返回的数。

                2.const void *buf

                        无类型的指针,缓冲区用来存放你要读出的内容。

                3.size_t count

                        读出文件的字节数,将文件中的数据要读出多少字节存放在缓冲区。

返回值:

读取成功:返回读取的字节数(空白文件返回值为0)

读取失败:返回值是-1

read函数问题:读文件的时候一定要确保文件的光标到了首位,不然读取将会是空白。这里解释一下:

假设给空白文件写入上面的内容,文件的光标就会到达f后,read的时候是从光标后面开始读,因此读出来的内容就会是空白的。此光标类似word文档打完字后面闪烁的那个光标。

解决方法:

                1.重新打开。写入成功后关闭文件,再打开文件即可使光标到首位。
                          

                                close(fd);

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

                2.重新定位光标。利用lseek函数重新定位光标。

                  lseek(int fd, offset, int whence);

                     1.文件:  #include
                                     #include

                      2.参数说明:fd:文件描述符

                                          offset:偏移值(光标正数往后移,负数往前移)相对于光标位置的偏移量

                                          int whence:光标位置,它有三种类型:

                                                                  SEEK_SET光标指向头部,

                                                                  SEEK_CUR光标指向当前位置,

                                                                   SEEK_END光标指向尾部

                      3.lseek函数可以巧妙的计算文件内容的大小:                

 int filesize = lseek(fd,0,SEEK_END);

creat()

头文件:

       #include 
       #include 
       #include 

函数原型:           

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

功能说明:创建一个文件

参数说明:

                  1.const char *pathname         创建的文件的存放路径

                  2.mode_t mode                       给创建的文件赋予权限,可以使用一下几个

                      宏表示        数字
					 S_IRUSR         4         可读
					 S_IWUSR         2         可写  
					 S_IXUSR         1         可执行	
					 S_IRWXU         7         可读、写、执行

返回值:

                返回此文件的文件描述符fd。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656239.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号