INTEGER*4 system status = system( string ) |
|||
string |
character*n |
输入 |
包含执行命令的字符串 |
返回值 |
INTEGER*4 |
输出 |
执行的 shell 的退出状态。有关该值的说明,请参见 wait(2)。 |
示例:system():
character*8 string / ’ls s*’ / INTEGER*4 status, system status = system( string ) if ( status .ne. 0 ) stop ’system: error’ end |
函数 system 将 string 作为输入传递给 shell,就好像以命令方式键入该字符串。注意:string 不能超过 1,024 个字符。
如果 system 可以找到环境变量 SHELL,则 system 会将 SHELL 值用作命令解释程序 (shell);否则使用 sh(1)。
当前进程将等到命令终止。
一直以来,对 cc 开发时进行了不同的假设:
如果 cc 调用 system,则 shell 始终为 Bourne shell。
system 函数会刷新打开的所有文件:
对于输出文件,缓冲区将刷新到实际文件中。
对于输入文件,无法预见指针的位置。
函数 sh(3f) 和 system(3f) 将参数字符串传递给 shell 用于执行。它们将参数字符串从 Fortran 字符值转换为 C 字符串值,并将其传递给 C 例程 system(3c)。例程 sh(3f) 和 system(3f) 的不同之处在于,system 在调用 C 例程 system 前将刷新 Fortran I/O 缓冲区,而 sh 则不会刷新缓冲区。由于刷新缓冲区需要很长时间,因此,如果 Fortran 输出与调用结果无关,那么优先使用例程 system,而非例程 sh 。
另请参见:execve(2)、wait(2) 和 system(3)。
system() 函数不能安全地用于多线程程序。请勿从多线程或并行程序中调用该函数。