2010-11-25 21 views
22

Giả sử tôi mở một tệp với open(). Sau đó, tôi fork() chương trình của tôi.Các bộ mô tả tệp có được chia sẻ khi fork() ing không?

Giờ đây, cha và con có chia sẻ cùng một khoản bù cho bộ mô tả tệp không?

Tôi có nghĩa là nếu tôi viết thư cho cha tôi, khoản chênh lệch sẽ được thay đổi ở trẻ em?

Hoặc các khoảng bù có độc lập sau fork() không?

Trả lời

28

Từ fork(2):

* The child inherits copies of the parent’s set of open file descrip- 
    tors. Each file descriptor in the child refers to the same open 
    file description (see open(2)) as the corresponding file descriptor 
    in the parent. This means that the two descriptors share open file 
    status flags, current file offset, and signal-driven I/O attributes 
    (see the description of F_SETOWN and F_SETSIG in fcntl(2)). 
+1

Không này phụ thuộc nơi các tập tin đã được mở? Có nghĩa là cuộc gọi mở (tên tệp, int ..) được thực hiện sau ngã ba hoặc trước cuộc gọi. – ArmenB

+1

@Armen: Vâng, đúng vậy. –

+0

Điều kỳ lạ về điều này là, nếu tuyên bố mở tệp được tạo sau ngã ba, thì bạn có hai bộ mô tả tệp khác nhau. Nhưng khi tôi cố gắng khóa tập tin bằng fcntl, nó sẽ không hoạt động. Cả hai đứa trẻ và cha mẹ bỏ qua khóa – ArmenB

2

Họ chia sẻ cùng một mức bù.

Các vấn đề liên quan