[C] fgets() 用法测试

[C] fgets() 用法测试

define explain on APUE:

[C] fgets() 用法测试

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
...