Почему мы не можем скопировать файловые дескрипторы, просто присвоив значение новым переменным?
Я новичок, который только начал изучать низкоуровневые вещи и C. Это может быть глупый вопрос, но я озадачен дескрипторами файлов. Я понимаю, что для их копирования нам нужен системный вызов dup2() или dup(). Но почему мы не можем просто скопировать их, назначив старые значения новым переменным? Например, почему мы можем сделать это
int f[2];
pipe(f); // I call pipe just to create two file descriptors, nothing special
int new_descriptor = f[0]; // this line is where I'm confused
Это потому, что целые числа, которые f[0],f[1] имеют конкретное значение, и закодированы в некотором роде? Спасибо!
1 ответ
Вы можете копировать файловые дескрипторы по назначению. Что вы не можете сделать, это изменить файл с указанным номером дескриптора файла (например, 1
) относится - для этого нужно dup()
или же dup2()
- или же fcntl()
, или же close()
, (Звонки такие как open()
или же pipe()
не влияет на уже открытые файловые дескрипторы; они возвращают новый, ранее не использовавшийся.)
Один способ взглянуть на это: нет ничего отличительного в переменной, которая содержит номер дескриптора файла - любой int
переменная, содержащая тот же номер, может использоваться как дескриптор файла. Но изменение файла, к которому относится файловый дескриптор, является гораздо более сложной задачей и требует системного вызова.