I tried this for fun to see if it works but eventually it does not.
    i = open("something", O_RDWR);
    for(i ; i<10 ; i++);
    {
            if(dup2(i, i+1 ) == -1 )
            {
                  printf("Dup failed\n");
                  exit(1);
            }
    }
I have straced the executable and the output is this:
open("something", O_RDWR)                   = 3
dup2(10, 11)                  = -1 EBADF (Bad file descriptor)
It seems as if only the last dup operation was executed!
The funny thing is that when I dup without a loop it works perfectly:
i = open("something", O_RDWR);
dup2(i,i+1);
i++;
dup2(i,i+1);
i++;
dup2(i,i+1);
i++;
dup2(i,i+1);
i++;
dup2(i,++i);
Output of strace:
open(".ping", O_RDWR)                   = 3
dup2(3, 4)                              = 4
dup2(4, 5)                              = 5
dup2(5, 6)                              = 6
dup2(6, 7)                              = 7
dup2(7, 8)                              = 8
What is the cause of dup failing in the for loop? Is there any error that I have missed?
                        
It's the spurious terminating
;in line2 - remove it! Your loop will run until 10 while doing nothing (the final semicolon means an empty statement), and then the command in braces executed once.