欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux?C/C++實現(xiàn)網(wǎng)絡(luò)流量分析工具

 更新時間:2023年10月31日 09:17:41   作者:程序猿編碼  
網(wǎng)絡(luò)流量分析的原理基于對數(shù)據(jù)包的捕獲、解析和統(tǒng)計分析,通過對網(wǎng)絡(luò)流量的細(xì)致觀察和分析,幫助管理員了解和優(yōu)化網(wǎng)絡(luò)的性能,本文將通過C++實現(xiàn)網(wǎng)絡(luò)流量分析工具,有需要的可以參考下

網(wǎng)絡(luò)流量分析的原理基于對數(shù)據(jù)包的捕獲、解析和統(tǒng)計分析,通過對網(wǎng)絡(luò)流量的細(xì)致觀察和分析,幫助管理員了解和優(yōu)化網(wǎng)絡(luò)的性能、提高網(wǎng)絡(luò)安全性,并快速排查和解決網(wǎng)絡(luò)故障和問題。

Linux中的網(wǎng)絡(luò)流量常見類型

在Linux中,網(wǎng)絡(luò)流量可以分為幾種不同的類型。以下是一些常見的網(wǎng)絡(luò)流量類型:

TCP流量:TCP(傳輸控制協(xié)議)是一種可靠的、面向連接的協(xié)議。TCP流量通常用于傳輸可靠的數(shù)據(jù),例如網(wǎng)頁瀏覽、文件傳輸?shù)取?/p>

UDP流量:UDP(用戶數(shù)據(jù)報協(xié)議)是一種無連接的協(xié)議,不保證數(shù)據(jù)的可靠性和順序。UDP流量通常用于實時應(yīng)用,如VoIP(網(wǎng)絡(luò)電話)、視頻流傳輸?shù)取?/p>

ICMP流量:ICMP(Internet控制消息協(xié)議)用于傳輸網(wǎng)絡(luò)控制消息和錯誤報告。ICMP流量通常用于網(wǎng)絡(luò)故障排查、Ping命令等。

HTTP流量:HTTP(超文本傳輸協(xié)議)是一種應(yīng)用層協(xié)議,用于在Web瀏覽器和服務(wù)器之間傳輸數(shù)據(jù)。HTTP流量通常用于網(wǎng)頁瀏覽、下載文件等Web應(yīng)用。

HTTPS流量:HTTPS是HTTP的安全版本,使用SSL(安全套接字層)或TLS(傳輸層安全)協(xié)議加密通信。HTTPS流量通常用于安全的Web傳輸,例如在線銀行、電子商務(wù)等。

DNS流量:DNS(域名系統(tǒng))用于將域名與IP地址相互映射。DNS流量通常用于解析域名、獲取IP地址等。

FTP流量:FTP(文件傳輸協(xié)議)用于在客戶端和服務(wù)器之間傳輸文件。FTP流量通常用于文件上傳、下載等。

SSH流量:SSH(安全殼層)是一種加密的網(wǎng)絡(luò)協(xié)議,用于安全和遠(yuǎn)程登錄。SSH流量通常用于安全的遠(yuǎn)程管理和文件傳輸。

這些網(wǎng)絡(luò)流量類型在不同的應(yīng)用場景和協(xié)議中扮演著不同的角色。分析和監(jiān)控不同類型的網(wǎng)絡(luò)流量可以幫助管理員了解網(wǎng)絡(luò)使用情況、排查故障并優(yōu)化網(wǎng)絡(luò)性能。

Linux下監(jiān)控網(wǎng)絡(luò)流量的目的

Linux下監(jiān)控網(wǎng)絡(luò)流量的目的有多個:

  • 網(wǎng)絡(luò)性能優(yōu)化:監(jiān)控網(wǎng)絡(luò)流量可以幫助管理員了解網(wǎng)絡(luò)的使用情況和瓶頸,以便進(jìn)行性能優(yōu)化和提高網(wǎng)絡(luò)效率。
  • 安全性增強:通過監(jiān)控網(wǎng)絡(luò)流量,可以及時發(fā)現(xiàn)異常的網(wǎng)絡(luò)流量,如DDoS攻擊、惡意軟件傳播等,以便及時采取相應(yīng)的防御措施。
  • 資源管理:監(jiān)控網(wǎng)絡(luò)流量可以幫助管理員了解各個主機(jī)或設(shè)備的網(wǎng)絡(luò)使用情況,對網(wǎng)絡(luò)資源進(jìn)行分配和管理,以避免某個用戶或設(shè)備占用過多的帶寬和資源導(dǎo)致其他用戶或設(shè)備受到影響。
  • 計費和成本控制:監(jiān)控網(wǎng)絡(luò)流量可以幫助提供網(wǎng)絡(luò)服務(wù)的機(jī)構(gòu)或企業(yè)對用戶的網(wǎng)絡(luò)使用情況進(jìn)行計費和成本控制,確保網(wǎng)絡(luò)資源的合理利用和節(jié)約成本。
  • 故障排查和問題定位:通過監(jiān)控網(wǎng)絡(luò)流量,可以及時發(fā)現(xiàn)網(wǎng)絡(luò)故障、問題和異常,輔助管理員進(jìn)行故障排除和問題定位,以減少網(wǎng)絡(luò)停機(jī)時間和降低維護(hù)成本。

總而言之,監(jiān)控網(wǎng)絡(luò)流量可以提高網(wǎng)絡(luò)性能、保障網(wǎng)絡(luò)安全、管理網(wǎng)絡(luò)資源、控制成本和故障排查,對于維護(hù)良好的網(wǎng)絡(luò)運行非常重要。

有哪些專門的工具和技術(shù)分析網(wǎng)絡(luò)流量

要實現(xiàn)Linux上的網(wǎng)絡(luò)流量分析,可以使用一些專門的工具和技術(shù)。下面是一些常用的方法和原理:

  • 使用抓包工具:在Linux上,可以使用像tcpdump、Wireshark這樣的抓包工具來捕獲網(wǎng)絡(luò)數(shù)據(jù)包。這些工具可以監(jiān)聽網(wǎng)絡(luò)接口,并將捕獲到的數(shù)據(jù)包保存到文件中進(jìn)行分析。
  • 使用流量監(jiān)控工具:像ntop、iftop、bmon等工具可以實時監(jiān)控網(wǎng)絡(luò)接口的流量情況,并提供統(tǒng)計信息和圖形化展示。
  • 分析捕獲的數(shù)據(jù)包:捕獲到的數(shù)據(jù)包可以使用Wireshark等工具進(jìn)行解析和分析。Wireshark可以顯示捕獲的數(shù)據(jù)包的詳細(xì)信息,如源IP地址、目的IP地址、協(xié)議類型、端口等,并提供過濾機(jī)制來篩選感興趣的數(shù)據(jù)。
  • 使用流量分析工具:除了抓包工具和流量監(jiān)控工具,還有一些專門用于網(wǎng)絡(luò)流量分析的工具,如tcpflow、Bro等。這些工具可以解析并分析網(wǎng)絡(luò)流量中的各種協(xié)議,提供更深入的網(wǎng)絡(luò)流量分析功能。

這些工具的實現(xiàn)原理都涉及到網(wǎng)絡(luò)協(xié)議、socket編程、數(shù)據(jù)包的捕獲和解析等知識。具體來說,抓包工具通過監(jiān)聽網(wǎng)絡(luò)接口,將接收到的數(shù)據(jù)包保存到文件中;流量監(jiān)控工具通過讀取接口的流量數(shù)據(jù)并進(jìn)行統(tǒng)計和展示;數(shù)據(jù)包分析工具和流量分析工具則依靠網(wǎng)絡(luò)協(xié)議和數(shù)據(jù)包的解析來提供更深入的分析功能。

總體來說,實現(xiàn)網(wǎng)絡(luò)流量分析需要一定的網(wǎng)絡(luò)知識和編程技巧,同時需要使用相關(guān)工具和技術(shù)進(jìn)行數(shù)據(jù)的捕獲、解析和分析。

在Linux文件系統(tǒng)的/proc目錄下分析網(wǎng)絡(luò)流量

在Linux文件系統(tǒng)的/proc目錄下,可以找到一些與網(wǎng)絡(luò)流量相關(guān)的信息。以下是一些常見的文件和目錄:

/proc/net/dev:這個文件提供了網(wǎng)絡(luò)設(shè)備的收發(fā)網(wǎng)絡(luò)流量統(tǒng)計信息,包括每個網(wǎng)絡(luò)接口的接收和發(fā)送數(shù)據(jù)包數(shù)量、錯誤統(tǒng)計、丟棄的數(shù)據(jù)包數(shù)量等。

使用cat或者less命令:你可以使用cat或者less命令來查看/proc下的文件內(nèi)容,例如:cat /proc/net/dev可以查看網(wǎng)絡(luò)設(shè)備的收發(fā)網(wǎng)絡(luò)流量統(tǒng)計信息。

使用awk或者sed命令進(jìn)一步處理:你可以使用awk或者sed命令來處理和過濾數(shù)據(jù),例如:cat /proc/net/dev | awk '{print $1, $2}'可以只打印出網(wǎng)絡(luò)設(shè)備名稱和接收流量的統(tǒng)計值.

/proc/net/tcp:這個文件提供了當(dāng)前TCP連接的詳細(xì)信息,包括本地和遠(yuǎn)程IP地址、端口號,連接狀態(tài),以及一些統(tǒng)計信息。
使用grep命令篩選:你可以使用grep命令來篩選你感興趣的信息,例如:grep "ESTABLISHED" /proc/net/tcp可以查看當(dāng)前所有TCP連接中狀態(tài)為ESTABLISHED的連接信息。

/proc/net/udp:類似于/proc/net/tcp文件,提供了當(dāng)前UDP連接的詳細(xì)信息。

/proc/net/raw:提供了當(dāng)前原始套接字(RAW socket)的相關(guān)信息,包括本地和遠(yuǎn)程IP地址、協(xié)議類型等。

/proc/net/snmp:提供了簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)相關(guān)的統(tǒng)計信息,包括接口、IP、TCP、UDP等各層的統(tǒng)計信息。

/proc/net/ip_conntrack:如果系統(tǒng)啟用了連接跟蹤(conntrack)功能,這個文件提供了關(guān)于當(dāng)前連接的跟蹤信息,包括連接狀態(tài)、源IP地址、目的IP地址、端口號等。

這些文件提供了一些基本的網(wǎng)絡(luò)流量統(tǒng)計和連接信息,可以通過讀取這些文件進(jìn)行分析和監(jiān)控。想要更加深入和詳細(xì)地分析網(wǎng)絡(luò)流量,則需要使用更專業(yè)的網(wǎng)絡(luò)流量分析工具。

Linux C/C++ 網(wǎng)絡(luò)流量分析

代碼中網(wǎng)絡(luò)流量分析是一個用于網(wǎng)絡(luò)統(tǒng)計的命令行工具,用于監(jiān)視系統(tǒng)網(wǎng)絡(luò)接口的流量、帶寬使用情況以及與網(wǎng)絡(luò)相關(guān)的統(tǒng)計數(shù)據(jù)。它可以提供網(wǎng)絡(luò)傳輸?shù)母鞣N統(tǒng)計信息,包括數(shù)據(jù)包的數(shù)量、字節(jié)數(shù)、錯誤、丟包等。

/*
 * 接口統(tǒng)計信息
 */
typedef struct nic_stats {
	struct timeval tv;		/* tv_sec, tv_usec */
	uint64_t rbytes;		/* total read bytes */
	uint64_t wbytes;		/* total written bytes */
	uint64_t rpackets;		/* total read packets */
	uint64_t wpackets;		/* total written packets */
	uint64_t ierr;			/* total input errors */
	uint64_t oerr;			/* total output errors */
	uint64_t coll;			/* total collisions */
	uint64_t nocp;			/* total nocanput */
	uint64_t defer;			/* total defers */
	uint64_t sat;			/* saturation value */
} nicstats_t;
/*
 * print_header - 打印標(biāo)題行
 */
static void
print_header(void)
{
	if (g_style)
		(void) printf("%8s %5s %14s %14s\n",
		    "Time", "Int", "rKb/s", "wKb/s");
	else
		(void) printf(
		    "%8s %5s %7s %7s %7s %7s %7s %7s %7s %7s\n",
		    "Time", "Int", "rKb/s", "wKb/s", "rPk/s",
		    "wPk/s", "rAvs", "wAvs", "%Util", "Sat");
}
static int split_ifname(char *if_name, char *drv, uint32_t *instance)
{
...
	n = 0;
	for (p = if_name; *p; p++)
		n++;
	if (n <= 1)
		return (B_FALSE);
	m = n;
	for (p--; isdigit(*p); p--)
		n--;
	if (m == n || n == 0)
		return (B_FALSE);
	(void) strncpy(drv, if_name, n);
	drv[n] = '\0';
	*instance = (uint32_t)atol(++p);
...
}
...
static void update_ksp_by_type(kstat_t **kspp, uint32_t types, char *name)
{
...
	if (types & KS_LINK) 
	{
		*kspp = fetch_ksp("link", 0, name);
		return;
	}
	(void) split_ifname(name, drv, &instance);
	if (types & KS_DRV_MAC) 
	{
		*kspp = fetch_ksp(drv, instance, "mac");
		return;
	}
	if (types & KS_DIN) 
	{
		*kspp = fetch_ksp(drv, instance, name);
		return;
	}
	if (types & KS_DRV) {
		*kspp = fetch_ksp(drv, instance, NULL);
		return;
	}
	if (types & KS_NAME) {
		*kspp = fetch_ksp(name, -1, NULL);
		return;
	}
	...
}
static void update_stats(void)
{
...
	(void) gettimeofday(&now_tv, NULL);
	if (g_tcp) 
	{
		/* 更新TCP統(tǒng)計信息 */
		if (g_new_kstat_chain) 
		{
			g_tcp_ksp = kstat_lookup(g_kc, "tcp", -1, "tcp");
			if (! g_tcp_ksp)
				die(1, "kstat_lookup");
		}
		if (kstat_read(g_kc, g_tcp_ksp, NULL) < 0)
			die(1, "kstat_read");
		g_tcp_new->tv.tv_sec = now_tv.tv_sec;
		g_tcp_new->tv.tv_usec = now_tv.tv_usec;
		TCP_UPDATE(inDataInorderSegs, "inDataInorderSegs");
		TCP_UPDATE(outDataSegs, "outDataSegs");
		TCP_UPDATE(inDataInorderBytes, "inDataInorderBytes");
		TCP_UPDATE(inDataUnorderSegs, "inDataUnorderSegs");
		TCP_UPDATE(inDataUnorderBytes, "inDataUnorderBytes");
		TCP_UPDATE(outDataBytes, "outDataBytes");
		TCP_UPDATE(estabResets, "estabResets");
		TCP_UPDATE(outRsts, "outRsts");
		TCP_UPDATE(attemptFails, "attemptFails");
		TCP_UPDATE(retransBytes, "retransBytes");
		TCP_UPDATE(passiveOpens, "passiveOpens");
		TCP_UPDATE(activeOpens, "activeOpens");
		TCP_UPDATE(halfOpenDrop, "halfOpenDrop");
		TCP_UPDATE(listenDrop, "listenDrop");
		TCP_UPDATE(listenDropQ0, "listenDropQ0");
	}
	if (g_udp) 
	{
		/* 更新UDP統(tǒng)計信息 */
		if (g_new_kstat_chain) 
		{
			g_udp_ksp = kstat_lookup(g_kc, "udp", -1, "udp");
			if (! g_udp_ksp)
				die(1, "kstat_lookup");
		}
		if (kstat_read(g_kc, g_udp_ksp, NULL) < 0)
			die(1, "kstat_read");
		g_udp_new->tv.tv_sec = now_tv.tv_sec;
		g_udp_new->tv.tv_usec = now_tv.tv_usec;
		UDP_UPDATE(inDatagrams, "inDatagrams");
		UDP_UPDATE(outDatagrams, "outDatagrams");
		UDP_UPDATE(inErrors, "inErrors");
		UDP_UPDATE(outErrors, "outErrors");
	}
	if (g_style == STYLE_NONE && ! g_list)
		return;
	/* 更新接口統(tǒng)計信息 */
	for (nicp = g_nicdatap; nicp; nicp = nicp->next) 
	{
		if (! (nicp->flags & NIC_UP))
			/* 鏈接未打開 */
			continue;
		if (g_nonlocal && (nicp->flags & NIC_LOOPBACK))
			continue;
		if (! (nicp->flags & NIC_OK_UPDATED))
			if (kstat_read(g_kc, nicp->op_ksp, NULL) < 0)
				die(1, "kstat_read");
		/* 保存網(wǎng)絡(luò)值 */
		nicp->new.tv.tv_sec = now_tv.tv_sec;
		nicp->new.tv.tv_usec = now_tv.tv_usec;
		nicp->new.rbytes =
			fetch6432(nicp->op_ksp, "rbytes64", "rbytes", 0);
		nicp->new.wbytes =
			fetch6432(nicp->op_ksp, "obytes64", "obytes", 0);
		nicp->new.rpackets =
			fetch6432(nicp->op_ksp, "ipackets64", "ipackets", 0);
		nicp->new.wpackets =
			fetch6432(nicp->op_ksp, "opackets64", "opackets", 0);
		switch (g_style) 
		{
		case STYLE_EXTENDED_PARSEABLE:
		case STYLE_EXTENDED:
			nicp->new.ierr = fetch32(nicp->op_ksp, "ierrors", 0);
			nicp->new.oerr = fetch32(nicp->op_ksp, "oerrors", 0);
			/*FALLTHROUGH*/
		case STYLE_FULL:
		case STYLE_SUMMARY:
			nicp->new.coll = fetch32(nicp->op_ksp, "collisions",
				0);
			nicp->new.nocp = fetch_nocanput(nicp->op_ksp, 0);
			nicp->new.defer = fetch32(nicp->op_ksp, "defer_xmts",
				0);
			nicp->new.sat = nicp->new.defer + nicp->new.nocp +
				nicp->new.coll;
			nicp->new.sat += fetch32(nicp->op_ksp, "noxmtbuf", 0);
			break;
		}
		nicp->speed = fetch64(nicp->op_ksp, "ifspeed", 0);
		nicp->duplex = fetch32(nicp->op_ksp, "link_duplex", 0);
	}
...
}
static void load_snmp(FILE *snmp)
{
...
	/* 從/proc/net/snmp加載TCP和/或UDP統(tǒng)計信息 */
...
	while (remaining) 
	{
		p = fgets(buf, sizeof (buf), snmp);
		if (! p)
			break;
		if (g_tcp && strncmp("Tcp: RtoAlgorithm RtoMin RtoMax MaxConn "
				"ActiveOpens PassiveOpens AttemptFails "
				"EstabResets CurrEstab InSegs OutSegs "
				"RetransSegs InErrs OutRsts", p, 141) == 0) 
				{
			int n;
			n = fscanf(snmp, "Tcp: %lld %lld %lld %lld "
			    "%lld %lld %lld %lld %lld %lld "
			    "%lld %lld %lld %lld\n",
			    &ll[0], &ll[1], &ll[2], &ll[3],
			    &ll[4], &ll[5], &ll[6], &ll[7],
			    &ll[8], &ll[9], &ll[10], &ll[11],
			    &ll[12], &ll[13]);
			if (n == 14) 
			{
				g_tcp_new->inDataInorderSegs = ll[9];
				g_tcp_new->outDataSegs = ll[10];
				g_tcp_new->estabResets = ll[7];
				g_tcp_new->outRsts = ll[13];
				g_tcp_new->attemptFails = ll[6];
				/* Note: bytes */
				g_tcp_new->retransBytes = ll[11];
				g_tcp_new->passiveOpens = ll[5];
				g_tcp_new->activeOpens = ll[4];
			}
			remaining--;
		} 
		else if (g_udp && strncmp("Udp: InDatagrams NoPorts "
				"InErrors OutDatagrams RcvbufErrors "
				"SndbufErrors\n", p, 72) == 0) 
				{
			int n;
			n = fscanf(snmp, "Udp: %lld %lld %lld %lld "
			    "%lld %lld\n",
			    &ll[0], &ll[1], &ll[2], &ll[3],
			    &ll[4], &ll[5]);
			if (n == 6) 
			{
				g_udp_new->inDatagrams = ll[0];
				g_udp_new->outDatagrams = ll[3];
				g_udp_new->inErrors = ll[2]; /* + ll[4]? */
				g_udp_new->outErrors = ll[5];
			}
			remaining--;
		}
	}
}
...
static void update_timestr(time_t *tptr)
{
...
	if (tptr)
		t = *tptr;
	else
		t = time(NULL);
	tm = localtime(&t);
	(void) strftime(g_timestr, sizeof (g_timestr), "%H:%M:%S", tm);
}
static void sleep_for(hrtime_t period, hrtime_t start_n)
{
...
	do 
	{
		pause_tv.tv_sec = pause_n / NANOSEC;
		pause_tv.tv_nsec = pause_n % NANOSEC;
		status = nanosleep(&pause_tv, (struct timespec *)NULL);
		if (status < 0)
			if (errno == EINTR)
			 {
				now_n = gethrtime();
				pause_n = start_n + period - now_n;
				if (pause_n < 100)
					return;
			}
			 else 
			{
				...
			}
	} while (status != 0);
}
...

If you need the complete source code, please add the WeChat number (c17865354792)

運行結(jié)果:

Time列:表示當(dāng)前采樣的響應(yīng)時間.

Int: 網(wǎng)卡名稱.

rKB/s : 每秒接收到千字節(jié)數(shù).

wKB/s : 每秒寫的千字節(jié)數(shù).

rPk/s : 每秒接收到的數(shù)據(jù)包數(shù)目.

wPk/s : 每秒寫的數(shù)據(jù)包數(shù)目.

rAvs : 接收到的數(shù)據(jù)包平均大小.

wAvs : 傳輸?shù)臄?shù)據(jù)包平均大小.

%Util : 網(wǎng)卡利用率(百分比).

Sat : 網(wǎng)卡每秒的錯誤數(shù).網(wǎng)卡是否接近飽滿的一個指標(biāo).嘗試去診斷網(wǎng)絡(luò)問題的時候,推薦使用-x選項去查看更多的統(tǒng)計信息.

這將顯示ens33接口的流量、帶寬使用情況以及其他統(tǒng)計數(shù)據(jù):

監(jiān)控所有網(wǎng)絡(luò)接口的統(tǒng)計信息,同時顯示TCP和UDP連接相關(guān)的統(tǒng)計信息:

總結(jié)

網(wǎng)絡(luò)流量分析需要一定的技術(shù)知識和經(jīng)驗,但通過學(xué)習(xí)和實踐,我們可以掌握這個技能,更好地管理和維護(hù)網(wǎng)絡(luò)環(huán)境。

以上就是Linux C/C++實現(xiàn)網(wǎng)絡(luò)流量分析工具的詳細(xì)內(nèi)容,更多關(guān)于C/C++網(wǎng)絡(luò)流量分析的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • QT計算時間差的方法詳解

    QT計算時間差的方法詳解

    這篇文章主要為大家詳細(xì)介紹了利用QT實現(xiàn)計算兩個時間的時間差的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • C++結(jié)構(gòu)體數(shù)組實現(xiàn)貪吃蛇

    C++結(jié)構(gòu)體數(shù)組實現(xiàn)貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了C++結(jié)構(gòu)體數(shù)組實現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++基于Boost.Asio實現(xiàn)端口映射器的過程詳解

    C++基于Boost.Asio實現(xiàn)端口映射器的過程詳解

    Boost.Asio 是一個功能強大的 C++ 庫,用于異步編程和網(wǎng)絡(luò)編程,它提供了跨平臺的異步 I/O 操作,在這篇文章中,我們將深入分析一個使用 Boost.Asio 實現(xiàn)的簡單端口映射服務(wù)器,文中有詳細(xì)的代碼講解,需要的朋友可以參考下
    2023-11-11
  • C++如何保存bmp圖片

    C++如何保存bmp圖片

    這篇文章主要介紹了C++如何保存bmp圖片問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言switch使用之詭異用法詳解

    C語言switch使用之詭異用法詳解

    今天小編就為大家分享一篇C語言switch使用之詭異用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++返回值是類名和返回值是引用的區(qū)別及說明

    C++返回值是類名和返回值是引用的區(qū)別及說明

    這篇文章主要介紹了C++返回值是類名和返回值是引用的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++利用LuaIntf調(diào)用Lua的方法示例

    C++利用LuaIntf調(diào)用Lua的方法示例

    這篇文章主要給大家介紹了關(guān)于C++利用LuaIntf調(diào)用Lua以及利用lua-intf來調(diào)用C++函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-11-11
  • 數(shù)據(jù)結(jié)構(gòu)用兩個棧實現(xiàn)一個隊列的實例

    數(shù)據(jù)結(jié)構(gòu)用兩個棧實現(xiàn)一個隊列的實例

    這篇文章主要介紹了C++語言數(shù)據(jù)結(jié)構(gòu)用兩個棧實現(xiàn)一個隊列的實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 深入學(xué)習(xí)C++智能指針之shared_ptr與右值引用的方法

    深入學(xué)習(xí)C++智能指針之shared_ptr與右值引用的方法

    智能指針的核心實現(xiàn)技術(shù)是引用計數(shù),每使用它一次,內(nèi)部引用計數(shù)加1,每析構(gòu)一次內(nèi)部的引用計數(shù)減1,減為0時,刪除所指向的堆內(nèi)存,今天通過本文給大家分享C++智能指針之shared_ptr與右值引用的方法,需要的朋友跟隨小編一起看看吧
    2021-07-07
  • C語言面試C++字符串替換空格示例

    C語言面試C++字符串替換空格示例

    這篇文章主要介紹了C語言面試中C++字符串替換空格示例,文中給出了基本上可以拿下offer的代碼,有需要的朋友可以借鑒參考下,希望大家都能早日拿到心儀的offer
    2021-09-09

最新評論