2009-12-03 34 views
7

Tôi nhận thấy trong định nghĩa của sigaction, sa_sigaction callback, đối số cuối cùng là void *.Bạn có thể vượt qua một đối số để sigaction?

struct sigaction { 
    void (*sa_handler)(int); 
    void (*sa_sigaction)(int, siginfo_t *, void *); 
    sigset_t sa_mask; 
    int sa_flags; 
    void (*sa_restorer)(void); 
} 

Điều này cho thấy bạn có thể chuyển đối số người dùng đến trình xử lý sa_sigaction.

Tuy nhiên, tôi không thể tìm thấy ví dụ về điều này.

Có ai biết liệu bạn có thể chuyển đối số cho hàm gọi lại sigaction không? và bạn đã có một ví dụ đơn giản chưa?

Trả lời

13

Thật không may là không. Trong khi chữ ký là một khoảng trống *, nó thực sự là một ucontext_t. Từ Độc UNIX Specification:

đối số thứ ba có thể được đúc một con trỏ đến một đối tượng kiểu ucontext_t để đề cập đến quá trình tiếp nhận bối cảnh đó đã bị gián đoạn khi tín hiệu đã được giao

+0

Và đây là một ví dụ: http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/063/6391/6391l3.html – codelogic

+0

Một liên kết đến trang có liên quan trong đặc tả SUSv3 trực tuyến: http: //www.opengroup .org/onlinepubs/009695399/functions/sigaction.html – ephemient

+0

thật không may :( – simon

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