weiqi7777

进击吧,linux(七) 文件操作学习

0
阅读(1906)

 

      Linux里面,对文件的操作是很有必要的,因此要先学习对文件的一些操作。总体来说,文件的操作,有以下几个:

1、  打开文件

2、  创建文件

3、  读文件内容

4、  写文件内容

5、  重定位文件指针

6、  关闭文件

这些知识,可以通过《unix高级环境编程》这本书中获知。

clip_image001

然后就通过linuxman命令,去查看每个函数的使用。如open。使用man open后。就出现以下信息了。

clip_image003

对于每一个函数的学习,可以使用如下模板来对函数归纳学习。这个模板是国嵌提供的。

clip_image005

下面就按照这个模板来对文件操作的各个函数进行学习。

一、打开文件

使用的是openlinux中使用man open。就可以得到这个函数的相关信息了。将信息归纳到模板中。

2.1.1 函数名

   open

2.1.2 函数原形

   int open(const char *pathname, int flags)

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

2.1.3 函数功能

   打开或者创建文件

2.1.4 所属头文件

   <sys/types.h>   <sys/stat.h>    <fcntl.h>

2.1.5 返回值

   成功:整数(文件描述符),

失败:-1 表示打开或者创建失败

2.1.6 参数说明

   pathname:要打开或者创建的文件的名字(含路径)

flags:文件打开的标志

-O_RDONLY(只读)  O_WRONLY(只写)  O_RDWR(可读可写) 这三个是必须的,以下是可以选择的

-O_CREAT(打开文件不存在则创建) 

-O_APPEND(以追加方式打开文件)

mode flagsO_CREAT时,才使用这个参数,否则不是用这个参数。表示待创建文件的权限。

-S_IRWXU00700  : 用户有读写执行权限

-S_IRUSR00400   :用户有读权限

-S_IWUSR00200  :用户有写权限

-S_IXUST00100   : 用户有执行权限

-S_IRWXG00070  :组有读写执行权限

-S_IRGRP00040    :    组有读权限

待续

2.1.7 示例代码

clip_image007

二、创建文件

2.2.1 函数名

   creat

2.2.2 函数原形

   int creat(const char * pathname, mode_t mode)

2.2.3 函数功能

   创建文件,并以只写的方式打开该文件

2.2.4 所属头文件

   <sys/types.h>  <sys/stat.h>  <fcntl.h>

2.2.5 返回值

   成功: 整数(文件描述符)

   不成功: -1(表示创建文件失败)

2.2.6 参数说明

   pathname要创建的文件的名字(含路径)

mode:创建的文件的权限

2.2.7 示例代码

clip_image009

创建函数,要使用mode参数,这个参数是定义文件的访问权限的。和linux中更改权限的数字格式是一样的,只不过数字前面要加个0

三、关闭文件

         2.3.1 函数名

   close

2.3.2 函数原形

   int close(int fd)

2.3.3 函数功能

   关闭一个文件描述符

2.3.4 所属头文件

   <unistd.h>

2.3.5 返回值

   成功: 0

   失败: -1

2.3.6 参数说明

fd 文件描述符

2.3.7 示例代码

   clip_image011

四、读文件

      使用read函数,不过注意,在man的时候,要man 2 read。因为man查找命令的时候,是有顺序的,首先是系统的命令,然后是系统调用函数,最后是库函数。Man 2就是指定在系统调用函数中查找。

         2.4.1 函数名

   read

2.4.2 函数原形

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

2.4.3 函数功能

   从一个打开的文件中读取数据

2.4.4 所属头文件

   <unistd.h>

2.4.5 返回值

   成功: 读取的字节数

   失败: -1

2.4.6 参数说明

   Fd 读取文件的文件描述符

   Buf 读取来的数据存到的buf空间

Count :希望读取的数据个数

2.4.7 示例代码

   clip_image012

五、写文件

   使用write函数,不过也是要用man 2 write

         2.5.1 函数名

   write

2.5.2 函数原形

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

2.5.3 函数功能

   向指定的文件中写入count个字符数据

2.5.4 所属头文件

   <unistd.h>

2.5.5 返回值

   成功:写入的数据个数

   失败:-1

2.5.6 参数说明

   fd 要写入数据的文件描述符

   buf 要写入文件的数据的位置

   Count 希望写入数据的个数

2.5.7 示例代码

   clip_image014

六、重定位文件指针

      2.6.1 函数名

   lseek

2.6.2 函数原形

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

2.6.3 函数功能

   重新定位文件的读写位置

2.6.4 所属头文件

   <sys/types.h> <unistd.h>

2.6.5 返回值

   成功:移动后的文件指针距离文件头的位置(以字节为单位)

   失败:-1

2.6.6 参数说明

   fd 文件描述符

   offset:从whence设置的地方开始移动,正数往后移,负数往前移

whence

-SEEK_SET: 从文件开头开始移动

-SEEK_CUR:从当前位置开始移动

-SEEK_END:从文件末尾开始移动

2.6.7 示例代码

clip_image016

这样一归纳下来的话,基本上文件的操作就搞定了。最好每一个函数的学习,都写一个示例代码去测试一下这个函数。