2013-08-26 4 views
0

을 사용하여 JCL에서 c 프로그램으로 매개 변수 전달 JCL에서 SYSIN DD *의 매개 변수를 c 프로그램에 전달하는 방법에 대한 예제를 누구든지 보여줄 수 있습니까?SYSIN DD *

필자의 JCL 프로그램이 PARM 옵션을 사용하여 c 프로그램에 매개 변수를 전달했지만 PARM 옵션의 문자 수가 100 자로 제한되어 JCL에서 SYSIN DD * 옵션을 대신 사용해야합니다. 그러나, 내 오래된 C 프로그램 argv paramater 전달 스타일을 사용하고 SYSIN DD * 사용할 때 여전히 적용 할 수 있는지 모르겠습니다.


이 내 오래된 JCL 코드는 모습입니다 :

/ SET P1='RBR1 FIRBS.AIC_REHBFG_FDG.BM '           
// SET P2='BGM.LOL_FDSG '              
// SET P3='"" '                 
// SET P4='X F GMHKD'               
//ST01 EXEC PGM=VCMBGJF,              
//PARM='&P1.&P2.&P3.&P4' 

이 나의 새로운 JCL 코드는 모습입니다처럼 :

//ST01 EXEC PGM=VCMBGJF 
//SYSIN DD *  
RBR1 FIRBS.AIC_REHBFG_FDG.BM          
BGM.LOL_FDSG              
""                
X F GMHKD 
/* 

답변

1

는 STDIN을 읽는 시도하고 그렇게하면 되세요 SYSIN에서 데이터를 반환하거나 SYSIN을 열어보십시오. fp = fopen("SYSIN", "r");

또는 c SYSIN의 DD 이름을 STDIN에 매달 기. DD *은 뒤 따르는 텍스트 줄에서 데이터를 가져 오라고 말합니다. SYSIN이라는 이름 일 필요는 없습니다.

마지막으로 모두 실패한 경우 C/메인 프레임 사용 설명서를 읽으십시오. (나는이없는 내가 메인 프레임에 쓸 때 그것은 오래 전, 그래서 사항을 잊는다.)

마지막으로, 첫 번째 예는 몇 가지 오류가있는 것 :

// SET P1='RBR1 FIRBS.AIC_REHBFG_FDG.BM '           
// SET P2='BGM.LOL_FDSG '              
// SET P3='"" '                 
// SET P4='X F GMHKD'               
//ST01 EXEC PGM=VCMBGJF,PARM='&P1.&P2.&P3.&P4' 
//* there should be a space between // and PARM 

나열된 parm 데이터가 < 100 문자이므로 PARM 문을 수정하면 코드 실행이 수정 될 수 있으므로이 내용을 언급합니다.

+0

@ user2718969,'SYSIN DD *'는 무제한의 텍스트 행을 허용해야합니다. zOs의 관점에서 보면 SYSIN은 단지 하나의 파일 일뿐입니다. – JackCColeman

+0

고맙겠지 만 SYSIN DD * 다음 줄에는 줄 당 100 자 이상이 있고 각 줄마다 공백이 있으므로 매개 변수를 전달하는 PARM 옵션은 실제로 가능하지 않다고 말합니다. 또한, 당신은 SYSINN DD를 * 후 라인에서 구문 분석을 시작할 것이라고 C의 fpopen 함수를 사용하여 SYSIN 여는 시도 할 수 있다고 언급? '\ n'delimeter로 각 줄을 파싱하고 '! = EOF'가있는 파일의 끝이 아닌지 테스트하십시오. 예제를 제공해 주시겠습니까 .. 죄송합니다. 다시 작성해야합니다. 5 분 내에 – ineedhelp

+0

@ user2718969 내에서만 편집 할 수 있다는 것을 알지 못했습니까? parms를 sscanf를 사용하여 텍스트 문자열로 읽는 코드가 있어야합니까? 파일을 읽을 때 fscanf (파일의 경우) 또는 scanf (stdin의 경우) 만 사용하면 동일한 코드가 작동해야합니다. scanf는 새 줄을 공백으로 처리하므로 파싱 지점에서 하나의 긴 문자열을 파싱합니다. scanf에 너무 복잡해지면 SYSIN을 텍스트 파일로 읽고 구문 분석 할 코드를 작성하십시오. 'SYSIN DD *'다음에 나오는 줄은 파일로 간주되므로 실제로 // SYSIN DD * 줄을 "읽지"않습니다. 또한 키워드 parms, X = 3 등을 정의하는 것을 고려하십시오. 이것은 훨씬 쉽습니다. – JackCColeman

0

CEE3PR2Language Environment 호출 가능 서비스를 사용할 수 있습니다. 그 목적은 80 바이트 [sic]보다 큰 parm 문자열을 호출 프로그램에 반환하는 것입니다. 본인은 z/OS 1.13의 새로운 기능이라고 생각합니다. 이것은 메인 프레임이 아닌 시스템으로는 이식 할 수 없습니다. 물론 JCL도 마찬가지입니다.