read函数
时间: 2023-08-15 11:07:11 浏览: 95
在Linux系统中,read()函数是一个用于从文件描述符(file descriptor)中读取数据的系统调用函数。其函数原型如下:
```
ssize_t read(int fd, void *buf, size_t count);
```
其中,参数fd是要读取的文件描述符,参数buf是用于存储读取数据的缓冲区地址,参数count是要读取的最大字节数。read()函数会尝试从文件描述符中读取count个字节的数据,并将读取的数据存储到buf中。函数返回实际读取到的字节数,如果返回-1表示读取失败。
需要注意的是,read()函数是一个阻塞函数,即当没有数据可读时,该函数会一直阻塞等待,直到有数据可读或者出现错误为止。如果要使用非阻塞的方式读取数据,可以使用fcntl()函数将文件描述符设置为非阻塞模式。
以下是一个使用read()函数读取文件内容的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <filename>\n", argv[0]);
return 1;
}
int fd = open(argv[1], O_RDONLY);
if (fd < 0) {
printf("Failed to open file %s!\n", argv[1]);
return 1;
}
char buffer[1024];
ssize_t nread;
while ((nread = read(fd, buffer, sizeof(buffer))) > 0) {
if (write(STDOUT_FILENO, buffer, nread) != nread) {
printf("Failed to write!\n");
return 1;
}
}
if (nread < 0) {
printf("Failed to read file!\n");
return 1;
}
close(fd);
return 0;
}
```
该程序首先打开指定的文件,并将文件描述符fd传递给read()函数进行读取。在循环中,每次最多读取sizeof(buffer)个字节的数据,并将读取的数据写入标准输出。当read()函数返回0时,表示文件已经读取完毕,可以退出循环。如果读取失败,程序会输出错误信息并退出。最后需要使用close()函数关闭文件描述符fd。
阅读全文