日期:2014-05-16  浏览次数:20569 次

UNIX 文件操作 极限问题.
/*******************************************      
       
用于将文件中   XXXXXXX加密的手机号码部分解密出来。

要处理的文件记录格式:   @@XXX   ...   XPPP   ...   Pn   @:空格。n: '\n '。P:为20位的其它内容。
处理后的文件记录格式:XXX   ...   Xn   。
即将两个的前导空格和后20位的其它内容去除,并将号码解密出来,后写回本文件,且覆盖原记录。
执行环境   HP_UNIX   .

file_name:   store_Decipher
creat_date:   20070615          
author:                      
        有些信息需要读配制文件,小弟在此写死了,另见宏定义部分。
小弟遇到的问题是:   1、replace_PhoneNum()   中的   strncpy()   不能取指定的N位。
                                      2、Memory   fault(coredump),不知哪里漏的。
                                      3、若把第一个fseek()注释去则运行则死循环(写回文件时)。
********************************************/


#include   <stdio.h>
#include   <stdlib.h>
#include   <fcntl.h>
#include   <time.h>
#include   <unistd.h>
#include   <dirent.h>
#include   <errno.h>
#include   <sys/stat.h>
#include   <strings.h>
#include   <stdarg.h>


#define   begin_bit               59
#define   KEY                 "DFIOD "
#define MY_SUCCEED 0
#define MY_FAIL                 1  
#define   PHONE_LENGTH         11


/**********************************************************  
function:   replace_PhoneNum
description:   获取手机号码部分
Input:   Record:   记录
              Systemtype:   计费类型
              sys_length:  
Output:   Record:   记录
Return:   MY_SUCCEED:   成功  
others:
***********************************************************/

int   replace_PhoneNum(   char   *   Record,   long   sys_length   )
{
FILE   *   fp;
int   begin_bit;
int   len;
int   i;
char   fmtBill[   128   ];
char   record_Bill[   512   ];
char   filed_Name[   32   ];
char   Begin_bit[   8   ];
char   Len[   8   ];
char   key[   8   ];
char   record_tmp[   768   ];


strcpy(   key,   KEY   );


for(   i   =   0;   i   <   PHONE_LENGTH;   i++   )
{
Record[   begin_bit   +   2   +   i   ]   =   Record[   begin_bit   +   2   +   i   ]   ^   key[   i   %   strlen(   key   )   ];
}

memset(   record_tmp,   0,   sizeof(   record_tmp   )   );
strcpy(   record_tmp,   Record   );

memset(   Record,   0   ,sizeof(   Record   )   );
str