一、函数介绍
read()函数是c语言中的标准IO函数之一,其作用是从指定的文件描述符(fd)中读取数据,将读取到的数据保存到由buf指向的内存空间。
函数定义如下:
ssize_t read(int fd, void *buf, size_t count);
其中,fd是要读取的文件描述符,buf是保存读取数据的缓冲区地址,count是要读取的字节数。
二、函数返回值
read()函数返回读取到的字节数,若返回0表示已读取到文件结尾,若返回-1表示出现错误,错误原因存放在errno中。
常见错误原因及对应的errno值:
1、EINTR:读取过程中被中断
2、EAGAIN:文件描述符被设置为非阻塞,读取操作将会阻塞
3、EFAULT:buf指向的内存空间不可访问
4、ENXIO:文件描述符超出范围或没有打开文件
5、EIO:I/O错误
6、EINVAL:文件描述符不支持读取操作
三、文件描述符
在使用read()函数读取数据时,需要指定文件描述符。文件描述符是一个整数,用于标识一个打开的文件。在Linux系统中,使用open()函数打开文件后,会返回一个文件描述符。下面是一个简单的使用open()函数打开文件的示例:
#include <stdio.h> #include <fcntl.h> int main() { int fd = open("test.txt", O_RDONLY); printf("file descriptor is %d", fd); return 0; }
在上面的代码中,使用O_RDONLY标志打开名为“test.txt”的文件,并将返回的文件描述符打印到屏幕上。
四、使用示例
下面是一个简单的使用read()函数读取文件内容的示例:
#include <stdio.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> int main() { int fd = open("test.txt", O_RDONLY); if (fd 0) { if (write(STDOUT_FILENO, buf, nread) != nread) { printf("failed to write to stdout"); return 1; } } if (nread < 0) { printf("failed to read from file"); return 1; } close(fd); return 0; }
在上面的代码中,使用open()函数打开名为“test.txt”的文件,并使用read()函数读取文件内容,将读取到的数据写入标准输出,直至读取到文件结尾。
五、总结
read()函数是c语言中常用的文件读取函数之一,通常搭配open()函数使用。使用时需要指定文件描述符、缓冲区地址、要读取的字节数。在使用过程中需要注意错误处理,尤其是对于返回-1的情况应该对errno进行判断并及时处理。