在windows上,我会使用这样的东西:
strcpy (errorFileName, _tempnam (NULL,"pfx"));
freopen (errorFileName, "wt", stderr);
但是linux中
tempnam
的man page特别指出不要使用它,而是使用mkstemp
。很公平。但是它返回一个文件描述符。有什么简单的方法可以使用mkstemp
将stderr
重定向到文件中吗?如果有必要,还可以将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.
资料来源:曼杜普