int dup(int oldfd);
返回可用的最小的fd number
int dup2(int oldf, int newfd);
返回newfd newfd如果已经打开则先关闭newfd newfd如果等于oldfd则什么都不做 返回newfd
那如何自己实现dup2()函数呢?
可以用dup()来做:
int my_dup2(int oldfd, int newfd)
{
int i, fd[newfd>oldfd?newfd:oldfd];
/* newfd is equal oldfd then we do nothing just return */
if (newfd == oldfd) return newfd;
/* close newfd whether newfd is a real fd */
close(newfd);
for (i = 0; (fd[i] = dup(oldfd)) != newfd; i++) ;
for (i–; i >= 0; i–) close(fd[i]);
return newfd;
}
使用open来打开文件O_RDWR|O_APPEND 文件可以使用lseek到任意位置read 但是write会自动先seek到文件结束 然后开始写
没有评论:
发表评论