1.dup()函数和dup2函数
dup()和dup2()函 数包含在头文件<unistd.h>中 原型:int dup(int oldfd); int dup2(int oldfd,int newfd); dup用来复制参数oldfd所指的文件描述符,返回最小的尚未被使用的文件描述符,错误返回-1;返回的新文件描述符和参数oldfd指向同一个文件,共享所有的锁定,读写指针等各项权限或标志位;如果用lseek()对某个文件描述符操作,另一个文件描述符的读写位置也会改变. dup2可以用参数newfd,指定新文件的描述符的数值.如果你所指定的newfd已经被程序使用,系统就会将其关闭以释放该文件描述符,若oldfd与newfd相等, 则dup2返回newfd,不关闭它,dup2 调用成功,返回新的描述符,出错返回-1;
2.fcntl()函数
fcntl包含在头文件<unistd.h>和<fcntl.h>中 函数原型:int fcntl(int fd,int cmd); int fcntl(int fd,int cmd,long,arg); int fcntl(int fd,int cmd,struct flock *lock); fcntl ()的功能依据cmd的值不同而不同,
F_DUPFD:如果cmd的值为F_DUPFD, 与dup的功能相同;
F_GETFD:此时,fcntl()函数用来获取文件描述符的close-on-exec 标志,调用成功返回标志值,若此标志值的最后一位是0,则该标
dup()和dup2()函 数包含在头文件<unistd.h>中 原型:int dup(int oldfd); int dup2(int oldfd,int newfd); dup用来复制参数oldfd所指的文件描述符,返回最小的尚未被使用的文件描述符,错误返回-1;返回的新文件描述符和参数oldfd指向同一个文件,共享所有的锁定,读写指针等各项权限或标志位;如果用lseek()对某个文件描述符操作,另一个文件描述符的读写位置也会改变. dup2可以用参数newfd,指定新文件的描述符的数值.如果你所指定的newfd已经被程序使用,系统就会将其关闭以释放该文件描述符,若oldfd与newfd相等, 则dup2返回newfd,不关闭它,dup2 调用成功,返回新的描述符,出错返回-1;
2.fcntl()函数
fcntl包含在头文件<unistd.h>和<fcntl.h>中 函数原型:int fcntl(int fd,int cmd); int fcntl(int fd,int cmd,long,arg); int fcntl(int fd,int cmd,struct flock *lock); fcntl ()的功能依据cmd的值不同而不同,
F_DUPFD:如果cmd的值为F_DUPFD, 与dup的功能相同;
F_GETFD:此时,fcntl()函数用来获取文件描述符的close-on-exec 标志,调用成功返回标志值,若此标志值的最后一位是0,则该标