2013-05-08 108 views
1

我想知道爲什麼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」,知道我沒有使用密切操作。

請幫忙。

+0

+1用於閱讀手冊頁。 – devnull 2013-05-08 07:38:32

回答

5

的錯誤是在你的病情:

(fdd = dup(fdo) < 0) 

變量fdd成爲dup(fdo) < 0結果。您需要檢查括號:

(fdd = dup(fdo)) < 0