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