linux – 套接字编程gfortran
发布时间:2020-12-15 07:31:45  所属栏目:Linux  来源:互联网 
            导读:我希望能够在我的Fortran应用程序中调用网络功能.我的老板要我在Fortran中做所有事情,而不是使用C和Fortran.我们已经在 Windows上使用PGI的Fortran编译器完成了该应用程序的一个版本.我们正在将它转移到 Linux,我们可能会使用它们的编译器.现在,我正在使用gfo
                
                
                
            | 
                         我希望能够在我的Fortran应用程序中调用网络功能.我的老板要我在Fortran中做所有事情,而不是使用C和Fortran.我们已经在 Windows上使用PGI的Fortran编译器完成了该应用程序的一个版本.我们正在将它转移到 Linux,我们可能会使用它们的编译器.现在,我正在使用gfortran. 我为这些网络调用创建了一个接口,所有内容都编译和链接.下面的代码类似于我正在做的事情,除了接口和常量在模块中. PROGRAM MAIN
    INTEGER,PARAMETER  ::AF_INET = 2
    INTEGER,PARAMETER  ::SOCK_STREAM = 1
    INTEGER,PARAMETER  ::IPPROTO_TCP = 6
    INTERFACE
      FUNCTION socket(domain,type,protocol)
        INTEGER  ::socket,domain,protocol
      END FUNCTION
    END INTERFACE
    sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)
    WRTIE(*,*)"Socket returned: ",sock
END PROGRAM 
 当我运行程序时,套接字函数返回-1失败.我真的不知道发生了什么.我没有在命令行上添加任何库,所以我猜它正在正确链接默认库.我编译使用 gfortran -o MAIN_PROGRAM MAIN_PROGRAM.f90 -fno-underscoring 解决方法您可以使用Fortran 2003中引入的ISO_C_Binding来访问C库功能,这是您拥有的最干净,最便携的选项.与任何其他供应商手册一样,Gfortran documentation有一些细节.还有一些项目旨在为Fortran 90: fortranposix和 posix90实现POSIX接口.但正如我所说,使用F2003功能的正确C-Binding接口可能是最干净的选项,另请参阅 fortranwiki.编辑: program testsocket
  use,intrinsic ::  iso_c_binding
  implicit none
  interface
    function socket(domain,protocol) bind(c,name="socket")
      use,intrinsic :: iso_c_binding
      integer(kind=c_int) :: socket
      integer(kind=c_int),value :: domain,protocol
    end function socket
  end interface
  integer :: sock
  sock = socket(2_c_int,1_c_int,6_c_int)
  write(*,*) "Socket returned: ",sock
end program testsocket                        (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
相关内容
- Linux递归chmod仅在子目录下
 - linux – 如果稳定性是最重要的事情,如何格式化XFS分区
 - 尽管在Linux内核模块中使用EXPORT_SYMBOL,如何防止“错误:
 - 利用iptables限制黑客暴力猜解LINUX服务器SSH密码(续):深
 - macos – 使用通配符在.zshrc中获取多个文件
 - 如何在Linux中调试FUSE文件系统崩溃
 - linux – 在bash中将apache日志日期格式转换为epoch
 - 在linux上禁用apache2的所有磁盘缓存
 - 锁定 – 在Linux内核抢占spin_lock和mutex_lock
 - 当curl尝试解析主机时,如何更改php curl超时(curl err_no 6
 
