[C] fgets() 用法测试

本文详细介绍C语言中fgets()函数的使用方法,通过实际代码示例演示如何从文件读取字符串,直到遇到换行符或达到指定长度。此外,还提供了一个去除黑名单中特定MAC地址的实用案例。

[C] fgets() 用法测试

define explain on APUE:

Reference define in 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
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值