在windows上,我会使用这样的东西:

strcpy (errorFileName, _tempnam (NULL,"pfx"));
freopen (errorFileName, "wt", stderr);

但是linux中tempnamman page特别指出不要使用它,而是使用mkstemp。很公平。但是它返回一个文件描述符。有什么简单的方法可以使用mkstempstderr重定向到文件中吗?如果有必要,还可以将mkstemp生成的文件名存储在程序中以备将来使用?
int fd = mkstemp("pfxXXXXXX");
if (fd != -1)
{
    //get file name here? or is there a better way
    strcpy (errorFileName, nameFromFd);
    freopen (errorFileName, "wt", stderr);
}

最佳答案

你想调查dup2()。

   dup2(fd,2);

应该这样做:
   int dup2(int oldfd, int newfd);

   dup2() makes newfd be the copy of oldfd, closing newfd first if  neces-
   sary, but note the following:

   *  If  oldfd  is  not a valid file descriptor, then the call fails, and
      newfd is not closed.

   *  If oldfd is a valid file descriptor, and newfd has the same value as
      oldfd, then dup2() does nothing, and returns newfd.

资料来源:曼杜普

08-26 14:21