当我使用fd指针来读()或写()时,fd指针是否会被递增,如何控制递增?

问题描述 投票:0回答:1

我试图从一个文件中读取一行,并返回一个指向下一行开头的指针,但我不明白当我使用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.txtfd2 在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个字符?

c buffer system-calls file-descriptor read-write
1个回答
3
投票

你说的是 文件偏移量. 对于你的第一个问题,是的,你关于偏移量的位置是正确的。对于你的第二个问题,你可以使用 lseek 将偏移量移回来。如果要向后移动2个字符,你可以执行 lseek(fd, -2, SEEK_CUR).

© www.soinside.com 2019 - 2024. All rights reserved.