Descriptores de archivos, open () devuelve cero

Abro un archivo y quiero escribir algo en él. El problema es que el fd2 por alguna razón es 0. En lugar de escribir en el archivo, escribe en el terminal. No cierro (0) en ninguna parte de mi código. ¿Por qué obtengo fd = 0 y no para el ejemplo 3. La razón por la que se escribe en el terminal es que el valor de fd es cero? Sé que fd = 0 es para entrada estándar,

¿Algunas ideas? Gracias.

if ((fd2 = open(logFile, O_RDWR |O_APPEND | O_CREAT , 0666) == -1)) DieWithError("open() failed"); printf("FD2 = %d",fd2); //returns me zero bzero(tempStr, sizeof(tempStr)); bzero(hostname, sizeof(hostname)); gethostname(hostname, sizeof(hostname)); sprintf(tempStr, "\n%sStarting FTP Server on host %s in port %d\n", ctime(&currentime), hostname, port); if (write(fd2, tempStr, strlen(tempStr)) == -1) DieWithError("write(): failed"); 

Tu condicional está desactivado. Cuidado con los paréntesis. Debería ser:

 if ((fd2 = open(logFile, O_RDWR |O_APPEND | O_CREAT , 0666)) == -1) // ^^^ ^^^ 

A veces podría ser mejor no ser más astuto que tú mismo:

 int fd = open(...); if (fd == -1) { DieWithError(); } 

Esto está mal.

 if ((fd2 = open(logFile, O_RDWR |O_APPEND | O_CREAT , 0666) == -1)) 

Tu quieres esto.

 if ((fd2 = open(logFile, O_RDWR |O_APPEND | O_CREAT , 0666)) == -1) 

Es difícil de ver porque la línea es muy larga, pero los paréntesis están en el lugar equivocado. En breve,

 if (( fd2 = open(...) == -1 )) // your code if (( fd2 = (open(...) == -1) )) // equivalent code if (( (fd2 = open(...)) == -1) )) // correct code 

Si la línea es tan larga, mejor mantenerla fuera del …

 #include  fd2 = open(...); if (fd2 < 0) err(1, "open failed");