我有這樣的枚舉:結合2個枚舉與數學運算符
enum bus {
MEDIA_BUS_UNKNOWN,
MEDIA_BUS_VIRTUAL = 1 << 1,
MEDIA_BUS_PCI = 1 << 2,
MEDIA_BUS_USB = 1 << 3,
};
和:
enum bus get_bus(char *sys)
{
FILE *fd;
char file[PATH_MAX];
char s[1024];
if(!strcmp(sys, "/sys/devices/virtual"))
return MEDIA_BUS_VIRTUAL;
snprintf(file, PATH_MAX, "%s/modalias", sys);
fd = fopen(file, "r");
if(!fd)
return MEDIA_BUS_UNKNOWN;
if(!fgets(s, sizeof(s), fd)) {
fclose(fd);
return MEDIA_BUS_UNKNOWN;
}
fclose(fd);
if(!strncmp(s, "pci", 3))
return MEDIA_BUS_PCI;
if(!strncmp(s, "usb", 3))
return MEDIA_BUS_USB;
return MEDIA_BUS_UNKNOWN;
}
我想創建一個功能與PCI返回裝置(S)或USB總線:
const char *get_device(const enum bus desired_bus)
{
enum bus bus;
...................................................
for(i = 0; i < md->md_size; i++, md_ptr++) {
bus = get_bus(md_ptr->sys);
if((bus & desired_bus) == desired_bus)
return md_ptr->node;
}
並稱之爲函數返回設備(多個):
get_device(const enum bus desired_bus)
如果請求是用於與PCI或USB總線類型的設備:
get_device(MEDIA_BUS_PCI | MEDIA_BUS_USB);
它可以使用數學運算符,枚舉?
設置時desired_bus到MEDIA_BUS_PCI | MEDIA_BUS_USB並檢查:如果((bus&desired_bus)== desired_bus)獲得輸出,如果總線是pci或usb,則不起作用。 – user935420
@ user935420:發佈實際使用過的代碼(包括枚舉定義)。但是這個註釋中的代碼中的desired_bus必須是枚舉值之一。 –
確定使用實際代碼 – user935420