2013-06-21 33 views
11

Tôi muốn biết cách hoạt động của hàm printf() khi chương trình thoát.printf flush tại lối ra chương trình

Hãy lấy đoạn mã sau:

int main(int ac, char **av) 
{ 
    printf("Hi"); 
    return 0; 
} 

Trong trường hợp này, như thế nào printf() quản lý để tuôn đệm của nó để stdout?

Tôi đoán nó phụ thuộc vào nền tảng, vì vậy hãy lấy Linux.

Nó có thể được triển khai bằng cách sử dụng gcc 's __attribute__((dtor)) nhưng sau đó thư viện chuẩn sẽ phụ thuộc vào trình biên dịch. Tôi cho rằng đây không phải là cách nó hoạt động.

Bất kỳ giải thích hoặc liên kết nào đến tài liệu đều được đánh giá cao. Cảm ơn bạn.

Trả lời

10

Thời gian chạy C sẽ đăng ký bộ đệm chuẩn khi exit() được gọi.

Xem điều này explanation.

+3

+1, điểm tốt và chính, trả về expr tương đương với thoát (expr) ._ –

1

Từ man stdio trên máy tính của tôi ở đây (nhấn mạnh thêm), whic chạy RHEL 5.8:

Một tập tin sau đó có thể mở cửa trở lại, bởi cùng này hay cách khác thực hiện chương trình , và nội dung của nó khai hoang hoặc sửa đổi (nếu nó có thể được đặt lại vị trí khi bắt đầu). Nếu chức năng chính quay trở lại người gọi ban đầu hoặc chức năng thoát (3) được gọi, tất cả các tập tin mở là đóng (do đó tất cả các luồng đầu ra đều bị xóa) trước khi kết thúc chương trình . Các phương pháp chấm dứt chương trình khác, chẳng hạn như hủy bỏ (3) không bận tâm về việc đóng các tệp đúng cách.

2

Khi chương trình thoát bình thường, chức năng exit luôn thực hiện tắt sạch thư viện I/O tiêu chuẩn, điều này làm cho tất cả dữ liệu đầu ra đệm được xóa.

Việc trả lại giá trị số nguyên từ chức năng chính là tương đương với gọi exit với cùng value.So, return 0 có tác dụng tương tự với exit(0)

Nếu _Exit hoặc _exit được gọi là, quá trình này sẽ được chấm dứt ngay lập tức, IO sẽ không bị xóa.

3

Chỉ cần để mở rộng đáp ứng trofanjoe của:

thoát gây chấm dứt chương trình bình thường. chức năng atexit được gọi trong thứ tự ngược lại của đăng ký, mở tập tin được đỏ ửng, mở dòng được đóng lại, và kiểm soát được trả lại cho môi trường.

Trong chính, trở expr là tương đương để thoát (expr).lối ra có lợi thế rằng nó có thể được gọi từ các chức năng khác

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