前面我们了解了write函数,这次我们了解下read函数
老样子,现在命令终端输入以下命令:
man 2 read
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
//说明;读多少个字节(读size_t count个)放到buf中
基于前面的写入函数的代码进行修改:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int fd;
char *buf = "I love China !";
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 success !\n");
}
}
printf("fd = %d \n",fd);
int n_write = write(fd,buf,strlen(buf));
if(n_write != -1)
{
printf("write %d to file\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;
}
会看到read 0 ,context
为什么?
因为我们写完后光标在末尾,读的是光标末尾后的数据,所以看不到任何数据
那怎么办呢?我们写完后将文件关闭,然后再打开,这样,光标就在开头了。代码修改如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int fd;
char *buf = "I love China !";
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 success !\n");
}
}
printf("fd = %d \n",fd);
int n_write = write(fd,buf,strlen(buf));
if(n_write != -1)
{
printf("write %d to file\n",n_write);
}
close(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;
}