【发布时间】:2014-03-10 07:08:17
【问题描述】:
我正在从大型机打开一个文件。目前,我无法访问我想要的输入文件。我不知道C代码或我的JCL是否有问题。有人帮帮我吗?
这是我的代码:
int main()
{
FILE *ifp, *ofp;
printf("CTRACE1\n");
ifp = fopen("dd:INPUTF", "rb, recfm=vb, lrecl=50");
printf("CTRACE2\n");
ofp = fopen("dd:OUTPUTF","w");
printf("CTRACE3\n");
fread( buffer, sizeof( char ), LINESZ, ifp );
printf( "Number of characters read = %i\n", num );
printf( "buffer = %s\n", buffer );
dstr = (DATASTR*) buffer;
printf("VAR_A = %.*s\n", sizeof(dstr->VAR_A), dstr->VAR_A);
printf("VAR_B = %.*s\n", sizeof(dstr->VAR_B), dstr->VAR_B);
printf("VAR_C = %.*s\n", sizeof(dstr->VAR_C), dstr->VAR_C);
printf("CTRACE4\n");
x[sizeof(x)+1]='\0';
y[sizeof(y)+1]='\0';
z[sizeof(z)+1]='\0';
printf("CTRACE5\n");
memcpy(x, dstr->VAR_A,sizeof(dstr->VAR_A));
memcpy(y, dstr->VAR_B,sizeof(dstr->VAR_B));
memcpy(z, dstr->VAR_C,sizeof(dstr->VAR_C));
printf("CTRACE6\n");
printf("%s,%s,%s",x,y,z);
printf("CTRACE7\n");
fwrite(buffer, sizeof(char), LINESZ, ofp);
fprintf(ofp,"%s,%s,%s\n",x,y,z);
fclose(ifp);
fclose(ofp);
return(0);
}
这是我的 JCL:
... //* TYPRUN=扫描 //JOBLIB DD DSN=X543863.LOADLIB1,DISP=SHR //STEP1 执行 PGM=CCCGRATE //INPUTF DD DSN=X543863.SAMPLE.INPUT01,DISP=SHR //OUTPUTF DD DSN=X543863.SAMPLE.OUTPUT01, // DISP=(新,CATLG,删除), // 空间=(CYL,(1,1,45)), // DCB=(RECFM=FB,LRECL=50) //SYSOUT DD SYSOUT=* //【问题讨论】:
-
您需要添加一些错误检查 - 永远不要调用
fopen并假设它会成功。当fopen返回NULL 时不要忘记检查errno。 -
如果这是您同时处理
C和大型机的起点,我强烈建议您切换到更易于管理的脚本语言,例如python。 -
你得到什么输出?是否有任何 CTRACE 行有效?
-
@VorsPrung ctrace 行有效。问题是,由于某种原因,它无法访问输入文件。
-
@PaulR 是的。我会在它工作后进行错误检查谢谢。