本文摘於: ccos(Cheng Cosine) ccos.bbs@vlsi1.iie.ncku.edu.tw Devil(璉璉) Devil.bbs@vlsi1.iie.ncku.edu.tw ---------------------------------------------------------------------------- 發信人: ccos (Cheng Cosine), 信區: fortran Is there anyone know the way to call DOS command in fortran code ? Please tell me ! by Cheng Cosine Nov./25/1995 ---------------------------------------------------------------------------- 發信人: Devil (璉璉), 信區: fortran 各家作法在尚未統一, 用不同的編譯器會略有差異. 以 MS Fortran 為例: c ------ Microsoft Fortran 5.1 fortran\source\samples\exec.fi --- c 節錄該檔! 可將該檔複製到 fortran\include 目錄下 c ---------------------------------------------------------------- INTERFACE TO FUNCTION SYSTEM[C] (STRING) INTEGER*2 SYSTEM CHARACTER*1 STRING[REFERENCE] END INTERFACE TO FUNCTION SPAWNLP [C,VARYING] (MODE) INTEGER*2 MODE,SPAWNLP END ------------------------------------------------------------------ 範例: --------------- test.for ----------------------------------------- include 'EXEC.fi' ... integer*4 summy, dummy2 integer*2 SYSTEM, SPAWNLP summy = SYSTEM('dir'C) dummy2 = SPAWNLP( 0,LOC( 'command'C ),LOC( 'command'C ), 1 LOC( '/e:1024'C ),INT4( 0 ) ) ... end ------------------------------------------------------------------ 上述範例為 dir 及 dos shell! PowerStation C ---- Microsoft Fortran PowerStation 1.0 f32\include\flib.fi ---- C Running Programs and System Commands C ----------------------------------------------------------------- INTERFACE TO INTEGER*4 FUNCTION RUNQQ(FILENAME, COMMANDLINE) CHARACTER*(*) FILENAME, COMMANDLINE END INTERFACE TO LOGICAL*4 FUNCTION SYSTEMQQ(COMMANDLINE) CHARACTER*(*) COMMANDLINE END C ---- Microsoft Fortran PowerStation 1.0 f32\include\flib.fd ---- C Running Programs and System Commands C ----------------------------------------------------------------- INTEGER*4 RUNQQ[EXTERN] LOGICAL*4 SYSTEMQQ[EXTERN] ------------------------------------------------------------------ 範例: --------------- test.for ----------------------------------------- include 'flib.fi' include 'flib.fd' ... integer*4 summy, dummy2 summy = SYSTEMQQ('dir'C) dummy2 = RUNQQ( 0,LOC( 'command'C ),LOC( 'command'C ), 1 LOC( '/e:1024'C ),INT4( 0 ) ) ... end ------------------------------------------------------------------ SYSTEM=SYSYEMQQ SPAWNLP=RUNQQ 一般來說, DOS 的內部命令會採用 SYSTEM , 執行其他程式改用 SPAWNLP. 不過通常來說, 差別會感覺不出來, 所以用 SYSTEM 會比較好用. 據說明書 指出 SYSTEM 所配置的記憶體會小於 32K, 所以一些需使用較大的記憶體的 程式可能會有問題.