当我将 fd 指针用于 read() 或 write() 时,fd 指针会递增吗?如何控制递增?

Does a fd pointer get incremented when I use it to read() or write() AND how can the incrementation be controlled?

我正在尝试从文件中读取一行并 return 指向下一行开头的指针,但我不明白当我使用它读取 10 个字符时 fd 发生了什么一次。我只能使用读、写、打开和 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 的第 11 个字符和 fd2oneline.txt 的 EOF 处吗?


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 指向 file.txt 中的第 41 个字符(while 循环 运行 4 次,'\n' 是第 38 个字符)。整数 newline 的值等于 38。

2) 如何让 fd 指向 '\n' 字符之后的第 39 个字符?

你说的是文件偏移量。对于你的第一个问题,是的,你对那个点的偏移量是正确的。对于第二个问题,您可以使用 lseek 将偏移量向后移动。要返回 2 个字符,您需要执行 lseek(fd, -2, SEEK_CUR).