fcntl函式實現dup

一隻小蘋果發表於2020-12-03

fcntl函式的定義

fcntl(file control),對檔案描述符提供各種各樣的控制操作,fcntl是POSIX規範指定的首選方法。
函式的定義:
#include <fcntl.h>
int fcntl(int fd,int cmd,…)
引數1:被操作檔案的檔案描述符
引數2:指定執行何種操作
引數3 可選引數

用fcntl實現dup的功能

int newfd=fcntl(int oldfd, FDUPFD,int new fd)
引數一:需要指向的oldfd
引數二:命令
引數三:新的檔案描述符
如果新指定的檔案描述符已經被佔用的話,那麼就使用當前可用的最小的檔案描述符
如果沒有被佔用,那麼就使用指定的檔案描述符。

案例:
1.開啟一個檔案
2利用fcntl將5號檔案描述符重定向到開啟的檔案
3.向開啟的檔案中寫入test

#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>


int main()
{
  int fd =open("./test.txt",O_RDWR|O_CREAT,0644);
  if(fd==-1)
  {
    perror("open error");
  }
  int newfd=fcntl(fd,F_DUPFD,5); //將5號檔案描述符重定向到fd
  printf("newfd=%d\n",newfd);
  int ret= write(newfd,"test",4);
  printf("ret=%d\n",ret);
  return 0;
}

相關文章