2015-10-07 73 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) 

};