[C] fgets() 用法测试
[C] fgets() 用法测试
define explain on APUE:
test code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
#define FILE_NAME "fgets_practice.c"
int i = 0;
char *ret_of_fgets = NULL;
FILE *fp = fopen(FILE_NAME, "r");
if (fp==NULL){
// should not happen!
return 127;
}
else{
char buf[128] = {'\0'};
i = 0;
do{
ret_of_fgets = fgets(buf, 128, fp);
printf("buf: >>>>%s<<<<", buf);
if (ret_of_fgets==NULL){
printf("ret_of_fgets is NULL!\n");
}
else if( *ret_of_fgets==EOF ){
printf(" *ret_of_fgets is EOF!\n");
}
else{
printf("ret_of_fgets is NOT NULL and NOT EOF\n");
}
}while(ret_of_fgets!=NULL);
}
printf("\n\n");
int funcRet = -1;
char *rmLine = "int main(int argc, char *argv[]){";
funcRet = remove_MAC_from_udhcp_blacklist(rmLine);
printf("funcRet: %d\n", funcRet);
return 0;
}
const char *UDHCP_MAC_BLACKLIST = "fgets_copy_test.c";
const char *UDHCP_MAC_BLACKLIST_TRANSFER = "fgets_copy_test.tmp";
int remove_MAC_from_udhcp_blacklist(char *formated_mac){
// const char *UDHCP_MAC_BLACKLIST = "/var/udhcp_mac_blacklist.txt";
// const char *UDHCP_MAC_BLACKLIST_TRANSFER = "/var/udhcp_mac_blacklist.tmp";
FILE *udhcpMACBlacklist_fp = fopen(UDHCP_MAC_BLACKLIST, "r");
FILE *udhcpMACBlacklistTransfer_fp = fopen(UDHCP_MAC_BLACKLIST_TRANSFER, "w");
char *ret_of_fgets = NULL;
char bytesRead[19] = {'\0'}; // 17 + '\n' + '\0'
if((udhcpMACBlacklist_fp != NULL)&&(udhcpMACBlacklistTransfer_fp != NULL)){
do{
if(0 == strncmp(formated_mac, bytesRead, 17)){
/* do nothing */;
fprintf(udhcpMACBlacklistTransfer_fp, "%s", "### R # E # P # L # A # C # E ###\n");
}
else{ /* not match, don't remove, write to transfer file */
fprintf(udhcpMACBlacklistTransfer_fp, "%s", bytesRead);
}
memset(bytesRead, 0, sizeof(char)*19);
ret_of_fgets = fgets(bytesRead, 19, udhcpMACBlacklist_fp);
}while(ret_of_fgets!=NULL);
fclose(udhcpMACBlacklistTransfer_fp); udhcpMACBlacklistTransfer_fp=NULL;
fclose(udhcpMACBlacklist_fp); udhcpMACBlacklist_fp=NULL;
char cmd[256] = {'\0'};
snprintf(cmd, 256, "mv %s %s", UDHCP_MAC_BLACKLIST_TRANSFER, UDHCP_MAC_BLACKLIST);
system(cmd); memset(cmd, 0, sizeof(char)*256);
}
else{
// should not happen!
return -1;
}
return 0;
}
Usage
$ cp fgets_practice.c fgets_copy_test.c
$ gcc fgets_practice.c && ./a.out
...