本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Linux下对文件的读取操作
linux下对文件的读取操作,像下面这样会读取不到内容,原因就是光标已经到内容的最后,再进行读取就会读不到内容。 运行结果如图所示:
代码如下:
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int fd;
char *buf="I love you the way you are!\n";
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("create file1 success!\n");
}
}
printf("open success: 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 bytes to file1\n",n_write);
}
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("read %d ,context:%s\n",n_read,readBuf);
close(fd);
return 0;
}
解决方式一便是关闭文件然后重新打开,这样光标就会回到开始,然后就可以进行内容的读取操作了。修改后的代码如下:
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int fd;
char *buf="I love you the way you are!\n";
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("create file1 success!\n");
}
}
printf("open success: 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 bytes to file1\n",n_write);
}
//以下是修改的代码
close(fd);
fd=open("./file1",O_RDWR);
//以上是修改的代码
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("read %d ,context:%s\n",n_read,readBuf);
close(fd);
return 0;
}
执行结果如下:
另外一种解决方案在下一篇进行介绍。