Am 10.05.2013 15:22 schrieb Roy Smith:

That's correct.  But, as described above, the system makes certain
guarantees which allow me to reason about the existence or non-existence
os such entries.

Nevertheless, your 37 is not a FD yet.

Let's take your program:

#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>

int main(int argc, char** argv) {
     int max_files = getdtablesize();
     assert(max_files >= 4);

Until here, the numbers 3 toll max_files may or may not be FDs.

     for (int i = 3; i < max_files; ++i) {
         close(i);
     }

Now they are closed; they are definitely no longer FDs even if they were. If you would use them in a file operation, you'd get a EBADF which means "fd is not a valid file descriptor".

     dup(2);


From now on, 3 is a FD and you can use it as such.

     char* message = "hello, fd world\n";
     write(3, message, strlen(message));
}


No, what I've done is taken advantage of behaviors which are guaranteed
by POSIX.

Maybe, but the integer numbers get or los their property as a file descriptor with open() and close() and not by assigning them to an int.


Thomas
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to