上一篇博文说到了open和write函数,这一篇继续来说一下剩下的几个API,分别是read、lseek和creat。
1.read函数
原型是:
ssize_t read(int fd, void *buf, size_t count);
read函数的返回值是读取到的字节数(即count),fd为文件描述符,count是读取到的字节数,
buf是字节缓冲区。
read函数的含义是:从fd所指向的文件中读取count个字节的内容存到字节缓冲区buf去。
重要提示:
在使用read函数时,一定要注意文件光标的位置,如果正常打开一个文件,并写进内容的话,如果还没关闭这个文件,那么此时的光标就在写进的内容的尾巴处,如果打开一个文件,并关闭了这个文件,那么此时的光标位置就在开始的地方。如果在调用read函数读取文件时,如果要重新执行一遍打开关闭文件的操作使光标跑到最开始的地方去的话,这样是非常low的,那么有什么办法不用这样也能使光标发生移动的吗,很好的一个办法就是使用lseek
函数
直接上代码:
(1)我们先来看一下用打开关闭一个文件的方式来使光标跑到初始位置的代码
#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()
{
//ssize_t write(int fd, const void *buf, size_t count);
int fd;
int n_write;
int n_read;
char *buf = "Hello world!";
char *readBuf;
fd = open("./file1",O_RDWR);
printf("fd = %d\n",fd);
if(fd == -1)
{
printf("fail to open the file1!\n");
fd = open("./file1",O_RDWR|O_CREAT,0600);
if(fd > 0)
{
puts("Success to open the file1!");
}
}
printf("fd = %d\n",fd);
//write(fd,buf,sizeof(buf));
n_write = write(fd,buf,strlen(buf));
close(