server-api-read

原型

用于打开文件读取数据。
一旦有了与一个打开文件描述相连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节。
在读取成功的时候,文件对应的读取位置指针,向后移动位置,大小为成功读取的字节数。

1
2
3
4
5
6
7
8
// fd:想要读的文件的文件描述符
// buf:指向内存块的指针,从文件中读取来的字节放到这个内存块中
// count:从该文件复制到buf中的字节个数,如果count的值大于SSIZE_MAX,结果不可预料。
// 返回值:
// 如果出现错误,返回-1
// 读文件结束,返回0
// 否则返回该文件复制到规定的缓冲区中的字节数
ssize_t read(int fd, void* buf, size_t count);

使用参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main(void)
{
int fd = -1, i;
ssize_t size = -1;
char buf[10]; // 存储数据缓冲区
char filename[] = "test.txt";

fd = open(filename, O_RDONLY); // 打开文件,文件不存在就报错
if(-1 == fd){
printf("open file %s failure, fd:%d\n", filename, fd);
return -1;
}

printf("open file %s success, fd:%d\n", filename, fd);

// 循环读取数据,直到文件末尾或报错
while(size){
size = read(fd, buf, 10); // 每次读取10字节数据
if(-1 == size){
// 读取数据出错
close(fd); // 关闭文件
printf("read file error occurs\n");

return -1;
} else {
if(size > 0){
printf("read %d bytes:", size);
printf("\"");

for(i = 0; i < size; ++i){
printf("%c", *(buf+i));
}

printf("\"\n");
} else {
printf("reach the end of file\n");
}
}

}

return 0;
}