2015-10-07 95 views
0

我正在閱讀Mach Ports的代碼,我想知道一段代碼的範例。我的意思是我知道Objective-C的結構的語法,但我不知道什麼語法message.header = (mach_msg_header_t) {......};這個代碼在Objective-C或C語言中的規則語法是什麼?

完整的代碼如下。

natural_t data; 

mach_port_t port; 

struct { 

    mach_msg_header_t header; 
    mach_msg_body_t body; 
    mach_msg_type_descriptor_t type; 

} message; 

message.header = (mach_msg_header_t) { 

    .msgh_remote_port = port, 
    .msgh_local_port = MACH_PORT_NULL, 
    .msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0), 
    .msgh_size = sizeof(message) 

}; 
+0

'(mach_msg_header_t)'是類型轉換。 –

+0

@KlasLindbäck謝謝,但我知道這是一個類型演員。所以我想知道代碼(mach_msg_header_t){ .msgh_remote_port = port, .....};是一個函數?或結構?和「.msgh_remote_port」是什麼意思?我很困惑。 –

+0

它似乎是結構字段分配。 'mach_msg_header_t'結構具有名爲'msgh_remote_port','msgh_local_port'等字段。 –

回答

0

該標頭被分配給類型鑄造mach_msg_header_t僞構造函數,初始化一些字段。結構的下跌下破,請訪問:http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/(部分粘貼以下)

typedef struct { 
    mach_msg_bits_t msgh_bits; 
    mach_msg_size_t msgh_size; 
    mach_port_t msgh_remote_port; 
    mach_port_t msgh_local_port; 
    mach_port_seqno_t msgh_seqno; 
    mach_msg_id_t msgh_id; 
} mach_msg_header_t; 

你所引用的位,確實在結構水平低田的分配並複製到頭部。

message.header = (mach_msg_header_t) { 

    .msgh_remote_port = port, 
    .msgh_local_port = MACH_PORT_NULL, 
    .msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0), 
    .msgh_size = sizeof(message) 

};