2012-03-25 24 views
0

私は次のプログラムによって、ユーザー空間を介しての/ proc/tx_infoに書いています:書き込み

char tx_buffer[100]; 
char tx_buffer[100]; 
static int proc_max_size = 100; 
static unsigned long buffer_size =0; 


int proc_read(char *buffer,char **buffer_location,off_t offset,int buffer_length,int *eof,void *data) 
{ 
int ret; 
if(offset>0) 
    { 
    ret=0; 
    } else { 
    memcpy(buffer,tx_buffer,buffer_size); 
    ret = buffer_size; 
    } 

      return ret; 
} 

int proc_write(struct file *filp, const char *buffer, unsigned long count, void *data) 
{ 

    if(count > proc_max_size) 
      count = proc_max_size; 
    if(copy_from_user(tx_buffer,buffer,count)) 
      return -EFAULT; 
//  tx_buffer[count] = '\0'; 
    buffer_size = count; 
    return count; 
} 

を次のように

int main() 
{ 
char *prot; 
char addr[14]; 
FILE *fp; 
int i = 0; 
prot = (char *)malloc(sizeof(char *)); 
//addr = (char *)malloc(sizeof(char *)); 
printf("\n enter the protocol for test\n"); 
scanf(" %s",prot); 
printf("\n enter the addr::"); 
scanf(" %s",addr); 

fp =fopen("/proc/tx_info","w"); 
if(fp == NULL) 
{ 
printf("\n unable to write on /proc/tx_info \n"); 
} 
fprintf(fp,"%s ",prot); 
while(addr[i] != '\0') 
{ 
fprintf(fp,"%c",addr[i]); 
i++; 
} 
fclose(fp); 

とのprocの読み取りと書き込みのプログラムを持っていますPROGに私のI/Pは、TCP 192.137.190.187 だったと私は猫の/ proc/tx_infoは、O/P以下の私を与えない:

のTCP 192.137.190.18

IPアドレスの最後の桁が印刷されない理由

答えて

2

アドレス配列には14文字しか割り当てられません。潜在的に15とヌルターミネータが必要なので、16文字を割り当てる必要があります。

つまり、印刷する前にアレイとそれが詰まっている場合は、最後を過ぎて書いています。配列の最後を過ぎて書くことで、未定義の動作を呼び出すことになります。

+0

ありがとうございました....非常に – karan421

1

addrアレイには16個の要素が必要です。最後の要素は、文字列を終了するnullを保持することです。