前面我们了解了write函数,这次我们了解下read函数
老样子,现在命令终端输入以下命令:
man 2 read
#includessize_t read(int fd, void *buf, size_t count); //说明;读多少个字节(读size_t count个)放到buf中
基于前面的写入函数的代码进行修改:
#include#include #include #include #include #include #include int main() { int fd; char *buf = "I love China !"; fd = open("./file1",O_RDWR); if(fd == -1) { printf("open file1 failedn"); 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 filen",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#include #include #include #include #include #include int main() { int fd; char *buf = "I love China !"; fd = open("./file1",O_RDWR); if(fd == -1) { printf("open file1 failedn"); 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 filen",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; }



