0
緩衝IO流在fork()
上有奇怪的行爲。fork()和緩衝IO流
在下面顯示的示例代碼片段中,正在讀取的文件大小爲252個字節。在fork()
之後,孩子正在成功地閱讀一條線並在屏幕上進行打印。但是,當控件返回到父項時,由於某種原因,文件偏移量被設置爲文件的結尾,並且父進程無法從流中讀取任何內容。如果fork()
創建了一個文件描述符的副本(可以使用系統調用read()
和write()
複製相同的程序,可以正常工作),可以期望父進程從流中讀取下一行,但這似乎並未發生。當控件到達父級時,文件偏移量被設置爲文件末尾。有人可以對此有所瞭解嗎?
int main(void)
{
char buffer[80];
FILE *file;
pid_t pid;
int status;
/* Open the file: */
file = fopen(FILENAME, "r");
if ((pid = fork()) == 0){
fgets(buffer, sizeof(buffer), file);
printf("%s", buffer);
}
else{
waitpid(pid, &status, 0);
printf("Offset [%d]\n", ftell(file));
fgets(buffer, sizeof(buffer), file);
printf("%s", buffer);
}
}