Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does it mean by "#define X X"?

In Linux header file epoll.h, I found the following code:

enum EPOLL_EVENTS {     EPOLLIN = 0x001, #define EPOLLIN EPOLLIN ... } 

What does it mean by #define EPOLLIN EPOLLIN?

like image 530
xmllmx Avatar asked Jun 13 '20 04:06

xmllmx


People also ask

What is mean by by?

—used to express farewell —often used with following now.

What do you mean by a symbol?

1 : something that stands for something else : emblem The eagle is a symbol of the United States. 2 : a letter, character, or sign used instead of a word to represent a quantity, position, relationship, direction, or something to be done The sign + is the symbol for addition. symbol.

What does it mean by in English?

by preposition (AGENT) A2. used to show the person or thing that does something: The motorcycle was driven by a tiny bald man.

What does by mean in date?

By a date means before but including that date. If you do not want to include that date, then use before instead. So "By Feb. 2" means before Feb 3.


2 Answers

#define EPOLLIN EPOLLIN

This defines the preprocessor macro EPOLLIN to be EPOLLIN.

It is probably defined for the purposes of later #ifdef EPOLLIN checks.

like image 37
GirkovArpa Avatar answered Sep 27 '22 21:09

GirkovArpa


This create a macro named EPOLLIN whose replacement text is also EPOLLIN.

This is most likely a way for the preprocessor to check which event codes are available and conditionally compile code as necessary. If we go to the git repo for glibc and look at the output of git blame we see the following for enum EPOLL_EVENTS:

ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  34) enum EPOLL_EVENTS ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  35)   {  ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  36)     EPOLLIN = 0x001, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  37) #define EPOLLIN EPOLLIN ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  38)     EPOLLPRI = 0x002, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  39) #define EPOLLPRI EPOLLPRI ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  40)     EPOLLOUT = 0x004, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  41) #define EPOLLOUT EPOLLOUT ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  42)     EPOLLRDNORM = 0x040, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  43) #define EPOLLRDNORM EPOLLRDNORM ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  44)     EPOLLRDBAND = 0x080, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  45) #define EPOLLRDBAND EPOLLRDBAND ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  46)     EPOLLWRNORM = 0x100, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  47) #define EPOLLWRNORM EPOLLWRNORM ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  48)     EPOLLWRBAND = 0x200, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  49) #define EPOLLWRBAND EPOLLWRBAND ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  50)     EPOLLMSG = 0x400, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  51) #define EPOLLMSG EPOLLMSG ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  52)     EPOLLERR = 0x008, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  53) #define EPOLLERR EPOLLERR 5e826ab5 (Ulrich Drepper 2003-03-25 01:14:36 +0000  54)     EPOLLHUP = 0x010, ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  55) #define EPOLLHUP EPOLLHUP 94833f11 (Ulrich Drepper 2007-10-28 01:34:10 +0000  56)     EPOLLRDHUP = 0x2000, 94833f11 (Ulrich Drepper 2007-10-28 01:34:10 +0000  57) #define EPOLLRDHUP EPOLLRDHUP 981569c7 (Joseph Myers   2016-03-14 19:04:53 +0000  58)     EPOLLEXCLUSIVE = 1u << 28, 981569c7 (Joseph Myers   2016-03-14 19:04:53 +0000  59) #define EPOLLEXCLUSIVE EPOLLEXCLUSIVE f8d44fdc (Andreas Jaeger 2012-07-26 13:11:33 +0200  60)     EPOLLWAKEUP = 1u << 29, f8d44fdc (Andreas Jaeger 2012-07-26 13:11:33 +0200  61) #define EPOLLWAKEUP EPOLLWAKEUP 4920765e (Ulrich Drepper 2011-12-21 22:14:05 -0500  62)     EPOLLONESHOT = 1u << 30, e11676dd (Ulrich Drepper 2004-01-21 06:23:26 +0000  63) #define EPOLLONESHOT EPOLLONESHOT 4920765e (Ulrich Drepper 2011-12-21 22:14:05 -0500  64)     EPOLLET = 1u << 31 5e826ab5 (Ulrich Drepper 2003-03-25 01:14:36 +0000  65) #define EPOLLET EPOLLET ad3bf20c (Ulrich Drepper 2002-12-16 23:38:42 +0000  66)   }; 

From here, you can see that most of these events were created back in 2002 but a number of others were added later. So these macros allow you to check if a particular flag is available as follows:

#ifdef EPOLLEXCLUSIVE  /* code that can handle EPOLLEXCLUSIVE */ #else /* code that uses an alternate event */ #endif 

This way the code can run on newer Linux versions that have the newer events available or on older versions that don't.

like image 94
dbush Avatar answered Sep 27 '22 21:09

dbush