Я бы знать, почему DUP всегда возвращает нули в следующем коде (в котором открыт файл, чем 10 DUP делаются последовательно):DUP возвращаемого значения всегда равно нулю
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
void main()
{
int i,fdo,fdd;
if((fdo = open("test", O_RDWR | O_CREAT, 0666)) < 0)
{
perror("main open");
return;
}
printf("main open: %d\n",fdo);
for(i=0; i< 10;i++)
{
if((fdd = dup(fdo) < 0)) {
perror("dup");
return ;
}
printf("opened %d, duped: %d \n", fdo,fdd);
}
}
Когда я запустить программу (на Linux 2.6.32-279.19.1.el6.i686, NetBSD или Solaris 5,9) , я получаю следующие результаты:
main open: 3
opened 3, duped: 0
opened 3, duped: 0
opened 3, duped: 0
opened 3, duped: 0
opened 3, duped: 0
opened 3, duped: 0
opened 3, duped: 0
opened 3, duped: 0
opened 3, duped: 0
opened 3, duped: 0
возвращаемое значение DUP всегда "0" ?!
Althought страницы человека состояния, возвращаемое значение должно быть дескриптор файла:
ВОЗВРАТ СТОИМОСТИ В случае успеха, эти системные вызовы возвращают новый дескриптор. При ошибке возвращается -1, а errno устанавливается соответствующим образом.
Я не понимаю, почему я получаю всегда «0», зная, что я не использовал близко операцию.
Пожалуйста, помогите.
+1 для чтения страницы руководства. – devnull