#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define SIZE 1024
int main1()
{
int fd = open("test.c", O_RDONLY);
if (-1 == fd)
{
perror("打开test.c文件失败");
return -1;
}
char buf[11];
// ssize_t read(int fd, void *buf, size_t count);
// fa:文件描述符
// buf:用于临时存放读到的数据
// 10:欲读取得字节数
// ret:实际读到得字节数、类型为长整型
// read()会把参数fd所指的文件传送nbyte个字节到buf指针所指的内存中。
// 若参数nbyte为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,
// 如果返回0,表示已到达文件尾或无可读取的数据。错误返回-1,并将根据不同的错误原因适当的设置错误码。
// ssize_t read(int fd, void *buf, size_t count);
ssize_t ret = read(fd, buf, 10);
if (-1 == ret)
{
perror("读失败");
return -1;
}
printf ("读到的字节数:%ld, 读到的内容:%s\n", ret, buf);
// 成功返回0,出错返回-1并设置errno参数,fd是要关闭的文件描述符。需要说明的是,
// 当一个进程终止时,内核对该进程所有尚未关闭的文件描述符调用close关闭,
// 所以即使用户程序不调用close,在终止时内核也会自动关闭它打开的所有文件
close(fd);
return 0;
}
int main2()
{
int fd = open("test.c", O_RDONLY);
if (-1 == fd)
{
perror("打开test.c文件失败");
return -1;
}
char buf[SIZE+1];
int count = 0;
int ret = 0;
while ((ret = read(fd, buf, SIZE)) != 0)
{
if (-1 == ret)
{
perror("读失败");
return -1;
}
count++;
buf[ret] = '\0';
printf ("%s", buf);
}
printf ("文件读结束, 读了 %d 次\n", count);
close(fd);
return 0;
}
// 读一个完整的大数据
int main()
{
int fd = open("test.c", O_RDONLY);
if (-1 == fd)
{
perror("打开test.c文件失败");
return -1;
}
char buf[SIZE+1];
char *p = buf;
int count = SIZE;
while (count)
{
int ret = read(fd, p, count);
if (-1 == ret)
{
perror("读取数据失败");
return -1;
}
printf ("ret = %d\n", ret);
count -= ret;
p += ret;
}
buf[SIZE] = 0;
printf ("%s",buf);
close(fd);
return 0;
}
read()函数
最新推荐文章于 2024-09-26 11:30:48 发布