热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java使用linux系统调用_在linux机器上调用系统调用[重复]

一个例子可能会有所帮助:如果我使用gfortran编译这样一个简单的Fortran程序:PROGRAMHELLOWRITE(*,*)HELLOWORL

一个例子可能会有所帮助:如果我使用gfortran编译这样一个简单的Fortran程序:

PROGRAM HELLO

WRITE(*,*) "HELLO WORLD"

END

我得到的代码看起来像这样(在x86-64上):

000000000040079d :

40079d: 55 push %rbp

40079e: 48 89 e5 mov %rsp,%rbp

4007a1: 48 81 ec e0 01 00 00 sub $0x1e0,%rsp

4007a8: 48 c7 85 28 fe ff ff movq $0x4008e0,-0x1d8(%rbp)

4007af: e0 08 40 00

4007b3: c7 85 30 fe ff ff 03 movl $0x3,-0x1d0(%rbp)

4007ba: 00 00 00

4007bd: c7 85 20 fe ff ff 80 movl $0x80,-0x1e0(%rbp)

4007c4: 00 00 00

4007c7: c7 85 24 fe ff ff 06 movl $0x6,-0x1dc(%rbp)

4007ce: 00 00 00

4007d1: 48 8d 85 20 fe ff ff lea -0x1e0(%rbp),%rax

4007d8: 48 89 c7 mov %rax,%rdi

4007db: e8 c0 fe ff ff callq 4006a0 <_gfortran_st_write>

4007e0: 48 8d 85 20 fe ff ff lea -0x1e0(%rbp),%rax

4007e7: ba 0b 00 00 00 mov $0xb,%edx

4007ec: be e7 08 40 00 mov $0x4008e7,%esi

4007f1: 48 89 c7 mov %rax,%rdi

4007f4: e8 57 fe ff ff callq 400650 <_gfortran_transfer_character_write>

4007f9: 48 8d 85 20 fe ff ff lea -0x1e0(%rbp),%rax

400800: 48 89 c7 mov %rax,%rdi

400803: e8 78 fe ff ff callq 400680 <_gfortran_st_write_done>

400808: c9 leaveq

400809: c3 retq

在那里&#xff0c;您可以看到对gfortran库函数的三次调用(例如 gfortran_transfer_character_write ) . 看起来像gfortran插入这些来实现 WRITE 语句 . 库函数是implemented in C&#xff0c;最终将通过C库包装器调用底层系统调用 .

当编译器构造对这些函数的调用时&#xff0c;它必须遵循C调用约定并对调用语言的数据类型执行任何转换 . 除此之外&#xff0c;这里没有魔力 . 一旦进入运行时库&#xff0c;就可以调用其他C库(如libc) .



推荐阅读
author-avatar
aaa521125aaa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有