2009年3月6日星期五

dup() dup2()

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到文件结束 然后开始写

没有评论:

发表评论