admin管理员组文章数量:1586729
在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;
}
版权声明:本文标题:Linux 文件操作基本命令 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727988679a1141365.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论