我試圖了解當父行程打開一個新檔案然后使用fork().
假設我有以下代碼:
int main(){
int fd = open("myFile.txt", O_RDWR | O_CREAT)
if(fork() == 0){
write(fd,"stack overflow", 16);
close(fd);
}
else{
wait(NULL);
char buff[17];
read(fd, &buff, 16);
printf("%s", buff);
}
}
我沒有列印到標準輸出,但我真的不明白為什么它會那樣做。如果讀取和寫入有不同的查找指標,那么運行此代碼將導致將“堆疊溢位”列印到標準輸出,這不是更聰明嗎?
顯然不是,想得到一個解釋
uj5u.com熱心網友回復:
兩個行程都使用相同的檔案描述(即相同的打開檔案)。
他們正在訪問相同的檔案指標,因為它是相同檔案描述的一部分。當其中一個寫入一些字符時,所有這些字符的檔案指標都會前進,因為它是同一個檔案指標。
您可以通過呼叫獲取檔案指標lseek(fd, 0, SEEK_CUR)。如果在啟動子程式之前列印檔案指標,并且在等待之后,您應該看到它已經改變了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/318464.html
