更正: 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 sys_Length 344L
#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 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 &nb