6

私はファイルを開いて、そこに何かを書きたいと思っています。問題は、何らかの理由で fd2 が 0 であることです。ファイルに書き込む代わりに、端末に書き込みます。コードのどこにも close(0) はありません。なぜ私はfd = 0を取得し、たとえば3ではありません.端末に書き込む理由は、fdの値がゼロであるためですか? fd = 0が標準入力用であることは知っていますが、

何か案は?ありがとうございました。

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");
4

2 に答える 2

10

あなたの条件はオフです。括弧に注意してください。そのはず:

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

裏切らない方が良い場合もあります。

int fd = open(...);

if (fd == -1) { DieWithError(); }
于 2012-11-01T01:23:24.087 に答える
7

これは間違っています。

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

あなたはこれを求めている。

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

行が長いので見にくいですが、括弧の位置が間違っています。要するに、

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

列が長い場合は、列に並ばないようにすることをお勧めしifます...

#include <err.h>

fd2 = open(...);
if (fd2 < 0)
    err(1, "open failed");
于 2012-11-01T01:23:24.233 に答える