当前位置:  技术问答>linux和unix

在编写一个同dup(2)功能相同的函数,要求不调用fcntl函数并且要有正确的出错处理

    来源: 互联网  发布时间:2015-07-26

    本文导语:  在编写一个同dup(2)功能相同的函数,要求不调用fcntl函数并且要有正确的出错处理,哪位大哥熟悉unix编程,给小弟解答一下,不胜感激。 | 不知道这个中不中:(我写的,根据apue) #include  #in...

在编写一个同dup(2)功能相同的函数,要求不调用fcntl函数并且要有正确的出错处理,哪位大哥熟悉unix编程,给小弟解答一下,不胜感激。

|
不知道这个中不中:(我写的,根据apue)



#include 
#include 
#include 
#include 
#include 

#define EBADF -1

/* simulate the dup2 routines */
int
mydup2(int filedes, int filedes2)
{
  int ret, i;
  int newfd, fds[255];
  char cmd[32];

  /* test if filedes and filedes2 valid(0~255) */
  if( filedes  255 || filedes2  255 )
    return EBADF;
  
  /* weather the filedes is opend? */
  if( (ret = fcntl(filedes, F_GETFL, 0) == -1 ) )
    return EBADF;

  /* filedes == filedes2 ? */
  if( filedes == filedes2 )
    return filedes2;
  else {
    if( (ret = fcntl(filedes2, F_GETFL, 0) != -1) ) {
      /* close the file, first! */
      close(filedes2);
    }
    /* call open system call to duplicate file descriptor */
    memset(fds, -1, sizeof(fds)/sizeof(fds[0]));
    memset(cmd, 0, 32);
    sprintf(cmd, "%s/%d", "/dev/fd", filedes);
    printf("cmd = %sn", cmd);
    
    while( (newfd = open(cmd, 0)) != -1 ) {
      if( newfd  filedes2 ) {
puts("ERROR: newfd > filedes2!");
return -1;
      } else break;
    } /* while... */
    
  } /* else... */
  
  /* close fds if exists. */
  if( newfd != -1 )
    for( i = 0; i  0 ) {
write(STDOUT_FILENO, buf, n);
      }
      if( n 

    
 
 

您可能感兴趣的文章:

  • 函数互相调用时Makefile编写
  • JSP中怎样编写时间戳?希望能有现成的函数!
  • linux 编写内核函数errno
  • 如何搭建“调用Xlib库里的函数编写X window程序”的环境?
  • linux内核是用c和汇编写的,怎么会有inline内联函数呢?
  • 想编写程序实现aix下prtonf的功能,即获取系统硬件配置,需要用到哪些函数?
  • SHELL编写函数问题,为什么只能调用一次?
  • 在Linux上用C语言编写的函数里面申请了一块内存,并且返回这块内存,最终它需要释放吗?
  • 用 JavaScript 编写 PG 函数 Plv8js
  • Unix里编写动态库时会不会像Windows一样在源代码中含有Dllmain()类似的主函数?
  • [请教]怎样获得共享库(动态连接库)中函数的原型以便编写专用库来覆盖它?
  • 求助:在Qt编写的程序下如何调用动态连接库中的函数!
  • tc 下面,中断函数的编写及线程的调度!
  • VB编写的DLL不能被JAVA调用,用C将VB编写的DLL包装起来,做成一个新的DLL;用C编写的DLL可以被JAVA调用,用JAVA再进行一层的包装,因为JAV
  • 如何在LINUX下用一个普通文件调用一个自己编写的调用系统的文件
  • 如何编写和调用c++类
  • 怎样才能调用自已编写的Servlets程序
  • Linux下如何调用VB编写的dll?
  • 怎样在bean里面调用vc编写的DLL?最好给个简单的例子吧,多谢啦!
  • linux 下c编写调用mysql的程序???
  • java调用C/C++编写的DLL文件问题,请有经验的高手指教?
  • 我在JB中编写Servlet,为什么在第一次请求时,其会再调用init()?
  • 怎样调用自己编写的java类?
  • 如何编写Shell,当SQL执行完毕后,继续调用Shell命令。
  • 如何编写自己的动态链结库与static lib,如何调用他们,希望详细一点
  • 求教:如何在用C++编写的server中调用Linux命令
  • 各位高手知道在JAVA中如何用一个名称创建一个对象实例,并调用其方法,注意:在编写代码时并不知要创建的对象的类名,也并不知方法名
  • 怎样编写一段程序,要求调用fork并在子进程中建立一个新的对话期。验证子进程变成了进程组长而且不再有控制终端。
  • 在客户端编写程序调用服务器端EJB中的方法该怎么写?
  • 请问如何在Java中调用一个我自己编写的exe程序呢?谢谢!
  • PHP调用VC编写的COM组件实例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 用jbuilder7编写成功运行正常的程序在用jdk中java命令执行出错,请帮忙!
  • 正在编写的一段程序出错,请高手进来看看。。。
  • 编写的ascii文件传输出错了,请大侠看看。
  • Linux下的类是怎么编写的,为什么我这样写老是出错啊?
  • 编写ARM上Linux驱动程序出错,请教高手要写些什么结构
  • 编写 linux shell 有什么好的编写工具呢?
  • 用Qt3.1.4编写的程序,如何加入自己编写的另外一个动态库呀?诚恳指教!!
  • 如图 scsi <---> scsi controller <---> pci <---> cpu 如果我想对scsi编写驱动我该对哪个部分编写?
  • 用什么工具编写JSP,可以象用InterDev编写ASP一样方便快捷?
  • 编写程序如编写人生,有人和我的意见相同吗?
  • 请问用jsp编写程序,非要编写代码么?有没有什么象fontpage2000那样的工具,能够生成一些固定模板的工具?就是说不用全部都写的工具。望
  • 用jsp编写web程序到底和java serverlet编写web程序有和区别
  • socket中,从client端(用java编写的)传到server端(用c编写的)的字符串为何总多一个ASCII码为10的字符呀?
  • 如何用java编写一个NT平台下的标准服务?
  • 关于用vj编写sniffer一问。
  • Linux下如何编写脚本文件
  • java能不能编写单独运行的程序?
  • Linux有没有类似bat文件,如何编写。
  • 用JAVA编写COM组件
  • 关于版本和bug管理的rule(规则)的编写
  • 在windows下可以用Code::Blocks编写linux程序吗?
  • linux下用java编写邮箱客户端程序与在windows下有什么不同??
  • AIX下如何编写批处理命令和计划任务
  • 怎么用JBuild编写java console程序
  • 如何编写EJB的客户端程序?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3