我试图从一个文件中读取一行,并返回一个指向下一行开头的指针,但我不明白当我使用fd一次读取10个字符时,fd会发生什么。我只能使用read、write、open和malloc。
例子 file.txt (有 \n
被明确显示)。)
Sphinx of black quartz, judge my vow.\n
Pack my box with five dozen liquor jugs.\n
The quick brown fox jumps over the lazy dog.\n
main.c:
int fd = open("file.txt", O_RDONLY);
int fd2 = open("oneline.txt", O_CREAT | O_WRONLY);
char *buffer = (char *)malloc(sizeof(char) * 10);
read(fd, buffer, 10);
write(fd2, &buffer, 10);
1) 将 fd
指的是 "十一 "字 file.txt
和 fd2
在EOF oneline.txt
?
继续 main.c 的例子。
int newline = 0, found = 0;
while(found == 0)
{
read(fd, buffer, 10);
for(int i = 0; buffer[i] != '\n' || i < 10; i++)
{
newline++;
if(buffer[i] == '\n')
found = 1;
}
}
如果 fd
指向第41个字符 file.txt
(while循环运行了4次,'\n'是第38个字符)。整数的值是 newline
等于38。
2) 如何让fd指向'\n'字符之后的第39个字符?
你说的是 文件偏移量. 对于你的第一个问题,是的,你关于偏移量的位置是正确的。对于你的第二个问题,你可以使用 lseek
将偏移量移回来。如果要向后移动2个字符,你可以执行 lseek(fd, -2, SEEK_CUR)
.