1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | fileA.sqc #include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> … static int npWrite( FILE *fp , const char * tovalue, FILE *fp1 ) { int iLen = 0, iRetLen = 0; iLen = strlen( tovalue ); … . iRetLen = fwrite( tovalue , sizeof( char ) , iLen , fp ); … return 0; } int request() { FILE * fp = 0x00; FILE * fpw =0x00; char logfile[100]; char batfile[100]; char binpath[100]; char execfile[100]; … .. (1) sprintf( execfile , "%s/%s %s %s %s %s 1>>%s", binpath,”a.out”,“123456”,”2011-01-01”,”test”,“A0001”,logfile); fpw = 0x00; (2) /* 通过 popen 当前进程 ( 进程 A) 会通过 fork 和 exec 系统调用来启动一个子进程,( 子进程代 ** 码见 fileB.sqc), 子进程也就是我们前面讲述到的进程 B。那么进程 A 是进程 B 的父进程 . */ fpw = popen( execfile ,"w"); if ( fpw == 0x00 ) { fprintf( fp , " popen error %s\n.", strerror( errno ) ); fclose( fp ); return -1; } … . if ( npWrite( fpw , “hello world” , fp ) ) return -1; … . pclose( fpw ); fflush( fp ); … . fclose( fp ); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | static int npRead(FILE * fp , int i ) { int iLen = 3; int iRetLen = 0; int ireadLen =0 ; char buflen[3+1]; char buffer[100]; memset( buffer , 0x00 , sizeof( buffer )); memset( buflen , 0x00 , sizeof( buflen )); ireadLen = … .; … ireadLen = fread( buffer , sizeof( char ) , iRetLen , stdin ); … buffer[iRetLen] = 0x00; … // 输出到与父进程相同的 LOG 文件中 printf( "recv[%d][%s]\n" ,iRetLen ,buffer ); … . return 0; } void nGetNetData() { int i = 0; for ( i = 0; i < n ; i++ ) { npRead( stdin , i ); } } |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |