300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Linux 文件操作基本命令

Linux 文件操作基本命令

时间:2018-08-18 04:03:32

相关推荐

Linux 文件操作基本命令

在Linux文件操作中,最常用的基本命令包括:打开或者创建文件,写入文件,读取文件

下面将依次介绍这几种操作的常用方法。

1.打开/创建文件

首先说明在VI编辑模式中,若要使用该API,需包含相应的头文件,这些头文件不需要用户死记硬背,只需用户通过man指令查询即可,例如常用的malloc函数,用户可通过指令man malloc 即可查询该函数的基本用法。

从man指令执行结果可以看到该函数的原型,包括所使用的头文件为#include<stdlib.h>,在DESCRIPTION栏中可以看到该函数的具体各个参数的含义及用法。下面就用man指令来查询文件操作常用函数的用法。

文件的打开/创建函数为open函数,下面我们来查询下该函数的具体用法(在此注意,open函数查询指令为man 2 open)

从SYNOPIS中可以找到该函数所需要的头文件,在DESCRIPTION中可以找到各个参数的相关含义及其用法。

​​​​在open函数中有以上两种原型,第二种相对于前一个多了一个mode_t mode参数,第一个参数const char *pathname为 文件名,指向文件路径,指明用户需要打开哪个文件。

第二个参数int flags 为权限参数,其中包括O_RDONLY(只读许可),O_WRONLY(只写许可),O_RDWR(可读可写)。

open的返回值,也称文件描述符,相当于索引,打开哪个文件就对应哪个索引,如果文件打开失败,则返回值为-1.

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include<stdio.h>int main(){int fd;fd=open("./file1",O_RDWR);printf("fd=%d\n",fd);}

在以上代码中,前三个头文件为open 所需,最后一个为标准输入输出所需。整型变量fd为文件描述符。运行结果如下:

再比较open函数第二种原型的用法。当我们打开的文件不存在的时候,需要创建相应的文件才能成功打开,此时我们的第二个参数就需要再添加一项创建的权限O_CREAT,同时第三个参数也需要给出mode值,其中0600代表可读可写权限,这里说明4为可读参数,2为可写参数,所以二者相加为6可读可写,其他位数字参数用户可自行查阅手册。

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include<stdio.h>int main(){int fd;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("creat file1 successd\n");}}}

这里需要说明,若用户之前已经创建了文件file1,则需要先将其删除才能得到创建的结果。

2.写入文件

写入文件用到的函数为write函数,函数原型如下:

第一个参数fd为被写入文件的文件描述符,第二个参数const *buf为写入缓冲区,即写入的内容,第三个参数size_t count为写入文件的大小,常用strlen来判断buf中的大小。

其函数基本用法描述为:将buf内容里面的count个字节写入文件描述符为fd的文件当中 。

若写入成功,其返回值为写入文件的字节大小,若不成功则返回值为-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="file write";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("creat file1 successd\n");}}printf("open file1 successed , fd=%d\n",fd);//ssize_t write(int fd, const void *buf, size_t count);write(fd,buf,strlen(buf));close(fd);return 0;}

其中close为关闭文件操作。在该程序运行之后,用户可打开自己所创建的file文件,查看是否将用户定义的buf里面的内容写入进去。

3.读取文件

读取文件的函数为read,其函数原型如下:

第一个参数fd为文件描述符,第二个参数void *buf为读入缓冲区,存放用户读取的数据,第三个参数size_t count为读取数据的大小。

其返回值为读取到的字节大小。

该函数用法描述为:在fd指向的文件读取count个字节的数据放到buf里面。

注意:

当我们要将用户刚刚写入的内容读取出来时,要注意光标位置。当写入完成以后,光标会移动到写入的最后一个字符的末尾,而在读取时也会从末尾开始,这样末尾后面为空,读取内容也会为空,解决此问题应在写入完成以后,重新将光标移动到第一个字符前面,用lseek函数。

文件光标移动操作:

第一个参数fd为文件描述符,第二个参数off_t offset 为偏移量,第三个参数int whence为光标固定位置(SEEK_SET文件头,SEEK_END末尾,SEEK_CUR当前)。

该函数作用描述为:将文件读写指针相对whence移动了offset个字节。

该函数的返回值时光标针对文件头的偏移值,如果移动失败,返回值为-1。

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include<stdio.h>#include<stdlib.h>#include <unistd.h>#include<string.h>int main(){int fd;char *buf="this is a txt";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("creat file1 successd\n");}}printf("open file1 successed , 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 byte to file\n",n_write);}//off_t lseek(int fd, off_t offset, int whence);lseek(fd,0,SEEK_SET);char *readBuf;readBuf=(char *)malloc(sizeof(char)*n_write+1);// ssize_t read(int fd, void *buf, size_t count);int n_read=read(fd,readBuf,n_write);printf("n_read is :%d,context is :%s\n",n_read,readBuf);close(fd);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。