linux標準庫頭文件解析

linuxc標準庫

?C 標準庫(C Standard Library)包含了一組頭文件,這些頭文件提供了許多函數和宏,用于處理輸入輸出、字符串操作、數學計算、內存管理等常見編程任務。。

頭文件功能簡介
<stdio.h>標準輸入輸出庫,包含?printfscanffgetsfputs?等函數。
<stdlib.h>標準庫函數,包含內存分配、程序控制、轉換函數等,如?mallocfreeexitatoirand?等。
<string.h>字符串操作函數,如?strlenstrcpystrcatstrcmp?等。
<math.h>數學函數庫,包含各種數學運算函數,如?sincostanexplogsqrt?等。
<time.h>時間和日期函數,如?timeclockdifftimestrftime?等。
<ctype.h>字符處理函數,如?isalphaisdigitisspacetouppertolower?等。
<limits.h>定義各種類型的限制值,如?INT_MAXCHAR_MINLONG_MAX?等。
<float.h>定義浮點類型的限制值,如?FLT_MAXDBL_MIN?等。
<assert.h>包含宏?assert,用于在調試時進行斷言檢查。
<errno.h>定義了錯誤碼變量?errno?及相關宏,用于表示和處理錯誤。
<stddef.h>定義了一些通用類型和宏,如?size_tptrdiff_tNULL?等。
<signal.h>定義了處理信號的函數和宏,如?signalraise?等。
<setjmp.h>提供非本地跳轉功能的宏和函數,如?setjmplongjmp?等。
<locale.h>定義了與地域化相關的函數和宏,如?setlocalelocaleconv?等。
<stdarg.h>提供處理可變參數函數的宏,如?va_startva_argva_end?等。
<stdbool.h>定義布爾類型和值?true?和?false
<stdint.h>定義了精確寬度的整數類型,如?int8_tuint16_t?等。
<inttypes.h>提供與整數類型相關的格式化輸出宏和函數。
<complex.h>提供復數運算的函數和宏,如?cabscarg?等。
<tgmath.h>為泛型數學函數提供宏,以簡化對不同類型數據的數學運算。
<fenv.h>提供對浮點環境的控制,如舍入模式和異常狀態。

1. stdio.h

簡介

標準輸入輸出庫

庫宏:

序號宏 & 描述
1NULL
這個宏是一個空指針常量的值。
2_IOFBF、_IOLBF?和?_IONBF
這些宏擴展了帶有特定值的整型常量表達式,并適用于?setvbuf?函數的第三個參數。
3BUFSIZ
這個宏是一個整數,該整數代表了?setbuf?函數使用的緩沖區大小。
4EOF
這個宏是一個表示已經到達文件結束的負整數。
5FOPEN_MAX
這個宏是一個整數,該整數代表了系統可以同時打開的文件數量。
6FILENAME_MAX
這個宏是一個整數,該整數代表了字符數組可以存儲的文件名的最大長度。如果實現沒有任何限制,則該值應為推薦的最大值。
7L_tmpnam
這個宏是一個整數,該整數代表了字符數組可以存儲的由 tmpnam 函數創建的臨時文件名的最大長度。
8SEEK_CUR、SEEK_END?和?SEEK_SET
這些宏是在?fseek?函數中使用,用于在一個文件中定位不同的位置。
9TMP_MAX
這個宏是 tmpnam 函數可生成的獨特文件名的最大數量。
10stderr、stdin?和?stdout
這些宏是指向 FILE 類型的指針,分別對應于標準錯誤、標準輸入和標準輸出流。

?函數列表:

1int fclose(FILE *stream)
關閉流 stream。刷新所有的緩沖區。
2void clearerr(FILE *stream)
清除給定流 stream 的文件結束和錯誤標識符。
3int feof(FILE *stream)
測試給定流 stream 的文件結束標識符。
4int ferror(FILE *stream)
測試給定流 stream 的錯誤標識符。
5int fflush(FILE *stream)
刷新流 stream 的輸出緩沖區。
6int fgetpos(FILE *stream, fpos_t *pos)
獲取流 stream 的當前文件位置,并把它寫入到 pos。
7FILE *fopen(const char *filename, const char *mode)
使用給定的模式 mode 打開 filename 所指向的文件。
8size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
從給定流 stream 讀取數據到 ptr 所指向的數組中。
9FILE *freopen(const char *filename, const char *mode, FILE *stream)
把一個新的文件名 filename 與給定的打開的流 stream 關聯,同時關閉流中的舊文件。
10int fseek(FILE *stream, long int offset, int whence)
設置流 stream 的文件位置為給定的偏移 offset,參數?offset?意味著從給定的?whence?位置查找的字節數。
11int fsetpos(FILE *stream, const fpos_t *pos)
設置給定流 stream 的文件位置為給定的位置。參數?pos?是由函數 fgetpos 給定的位置。
12long int ftell(FILE *stream)
返回給定流 stream 的當前文件位置。
13size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
把 ptr 所指向的數組中的數據寫入到給定流 stream 中。
14int remove(const char *filename)
刪除給定的文件名 filename,以便它不再被訪問。
15int rename(const char *old_filename, const char *new_filename)
把 old_filename 所指向的文件名改為 new_filename。
16void rewind(FILE *stream)
設置文件位置為給定流 stream 的文件的開頭。
17void setbuf(FILE *stream, char *buffer)
定義流 stream 應如何緩沖。
18int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
另一個定義流 stream 應如何緩沖的函數。
19FILE *tmpfile(void)
以二進制更新模式(wb+)創建臨時文件。
20char *tmpnam(char *str)
生成并返回一個有效的臨時文件名,該文件名之前是不存在的。
21int fprintf(FILE *stream, const char *format, ...)
發送格式化輸出到流 stream 中。
22int printf(const char *format, ...)
發送格式化輸出到標準輸出 stdout。
23int sprintf(char *str, const char *format, ...)
發送格式化輸出到字符串。
24int vfprintf(FILE *stream, const char *format, va_list arg)
使用參數列表發送格式化輸出到流 stream 中。
25int vprintf(const char *format, va_list arg)
使用參數列表發送格式化輸出到標準輸出 stdout。
26int vsprintf(char *str, const char *format, va_list arg)
使用參數列表發送格式化輸出到字符串。
27int fscanf(FILE *stream, const char *format, ...)
從流 stream 讀取格式化輸入。
28int scanf(const char *format, ...)
從標準輸入 stdin 讀取格式化輸入。
29int sscanf(const char *str, const char *format, ...)
從字符串讀取格式化輸入。
30int fgetc(FILE *stream)
從指定的流 stream 獲取下一個字符(一個無符號字符),并把位置標識符往前移動。
31char *fgets(char *str, int n, FILE *stream)
從指定的流 stream 讀取一行,并把它存儲在 str 所指向的字符串內。當讀取?(n-1)?個字符時,或者讀取到換行符時,或者到達文件末尾時,它會停止,具體視情況而定。
32int fputc(int char, FILE *stream)
把參數 char 指定的字符(一個無符號字符)寫入到指定的流 stream 中,并把位置標識符往前移動。
33int fputs(const char *str, FILE *stream)
把字符串寫入到指定的流 stream 中,但不包括空字符。
34int getc(FILE *stream)
從指定的流 stream 獲取下一個字符(一個無符號字符),并把位置標識符往前移動。
35int getchar(void)
從標準輸入 stdin 獲取一個字符(一個無符號字符)。
36char *gets(char *str)
從標準輸入 stdin 讀取一行,并把它存儲在 str 所指向的字符串中。當讀取到換行符時,或者到達文件末尾時,它會停止,具體視情況而定。
37int putc(int char, FILE *stream)
把參數 char 指定的字符(一個無符號字符)寫入到指定的流 stream 中,并把位置標識符往前移動。
38int putchar(int char)
把參數 char 指定的字符(一個無符號字符)寫入到標準輸出 stdout 中。
39int puts(const char *str)
把一個字符串寫入到標準輸出 stdout,直到空字符,但不包括空字符。換行符會被追加到輸出中。
40int ungetc(int char, FILE *stream)
把字符 char(一個無符號字符)推入到指定的流 stream 中,以便它是下一個被讀取到的字符。
41void perror(const char *str)
把一個描述性錯誤消息輸出到標準錯誤 stderr。首先輸出字符串 str,后跟一個冒號,然后是一個空格。
42int snprintf(char *str, size_t size, const char *format, ...)
格式字符串到 str 中。

?示例:

#include <stdio.h>
#include <string.h>/*
string .h 頭文件定義了一個變量類型、一個宏和各種操作字符數組的函數。
<string.h> 是 C 標準庫中的一個頭文件,提供了一組用于處理字符串和內存塊的函數。
這些函數涵蓋了字符串復制、連接、比較、搜索和內存操作等。
*/int main(int argc, char const *argv[])
{/*void *memchr(const void *str, int c, size_t n)在參數 str 所指向的字符串的前 n 個字節中搜索第一次出現字符 c(一個無符號字符)的位置。*/char str1[10] = "poiuyoor";char *cp1 = (char *)memchr(str1, 'o', 8);puts(cp1);/*int memcmp(const void *str1, const void *str2, size_t n)把 str1 和 str2 的前 n 個字節進行比較。返回值如果返回值 < 0,則表示 str1 小于 str2。如果返回值 > 0,則表示 str1 大于 str2。如果返回值 = 0,則表示 str1 等于 str2。*/char str2[10] = "poiuyppp";if (!memcmp(str1, str2, 5)){printf("前5個字符一樣....\n");}/*void *memset(void *str, int c, size_t n)將指定的值 c 復制到 str 所指向的內存區域的前 n 個字節中。*/cp1=(char*)memset(str1,'t',3);puts(cp1);return 0;
}

2. string.h

簡介

string .h?頭文件定義了一個變量類型、一個宏和各種操作字符數組的函數。

<string.h>?是 C 標準庫中的一個頭文件,提供了一組用于處理字符串和內存塊的函數。這些函數涵蓋了字符串復制、連接、比較、搜索和內存操作等。

?函數列表:

序號函數 & 描述
1void *memchr(const void *str, int c, size_t n)
在參數?str?所指向的字符串的前 n 個字節中搜索第一次出現字符 c(一個無符號字符)的位置。
2int memcmp(const void *str1, const void *str2, size_t n)
把?str1?和?str2?的前 n 個字節進行比較。
3void *memcpy(void *dest, const void *src, size_t n)
從 src 復制 n 個字符到?dest
4void *memmove(void *dest, const void *src, size_t n)
另一個用于從?src?復制 n 個字符到?dest?的函數。
5void *memset(void *str, int c, size_t n)
將指定的值 c 復制到 str 所指向的內存區域的前 n 個字節中。
6char *strcat(char *dest, const char *src)
把?src?所指向的字符串追加到?dest?所指向的字符串的結尾。
7char *strncat(char *dest, const char *src, size_t n)
把?src?所指向的字符串追加到?dest?所指向的字符串的結尾,直到 n 字符長度為止。
8char *strchr(const char *str, int c)
在參數?str?所指向的字符串中搜索第一次出現字符 c(一個無符號字符)的位置。
9int strcmp(const char *str1, const char *str2)
把?str1?所指向的字符串和?str2?所指向的字符串進行比較。
10int strncmp(const char *str1, const char *str2, size_t n)
把?str1?和?str2?進行比較,最多比較前 n 個字節。
11int strcoll(const char *str1, const char *str2)
把?str1?和?str2?進行比較,結果取決于 LC_COLLATE 的位置設置。
12char *strcpy(char *dest, const char *src)
把?src?所指向的字符串復制到?dest
13char *strncpy(char *dest, const char *src, size_t n)
把?src?所指向的字符串復制到?dest,最多復制 n 個字符。
14size_t strcspn(const char *str1, const char *str2)
檢索字符串 str1 開頭連續有幾個字符都不含字符串 str2 中的字符。
15char *strerror(int errnum)
從內部數組中搜索錯誤號 errnum,并返回一個指向錯誤消息字符串的指針。
16size_t strlen(const char *str)
計算字符串 str 的長度,直到空結束字符,但不包括空結束字符。
17char *strpbrk(const char *str1, const char *str2)
檢索字符串?str1?中第一個匹配字符串?str2?中字符的字符,不包含空結束字符。也就是說,依次檢驗字符串 str1 中的字符,當被檢驗字符在字符串 str2 中也包含時,則停止檢驗,并返回該字符位置。
18char *strrchr(const char *str, int c)
在參數?str?所指向的字符串中搜索最后一次出現字符 c(一個無符號字符)的位置。
19size_t strspn(const char *str1, const char *str2)
檢索字符串?str1?中第一個不在字符串?str2?中出現的字符下標。
20char *strstr(const char *haystack, const char *needle)
在字符串?haystack?中查找第一次出現字符串?needle(不包含空結束字符)的位置。
21char *strtok(char *str, const char *delim)
分解字符串?str?為一組字符串,delim?為分隔符。
22size_t strxfrm(char *dest, const char *src, size_t n)
根據程序當前的區域選項中的 LC_COLLATE 來轉換字符串?src?的前?n?個字符,并把它們放置在字符串?dest?中。

示例:

#include <stdio.h>
#include <string.h>/*
string .h 頭文件定義了一個變量類型、一個宏和各種操作字符數組的函數。
<string.h> 是 C 標準庫中的一個頭文件,提供了一組用于處理字符串和內存塊的函數。
這些函數涵蓋了字符串復制、連接、比較、搜索和內存操作等。
*/int main(int argc, char const *argv[])
{/*void *memchr(const void *str, int c, size_t n)在參數 str 所指向的字符串的前 n 個字節中搜索第一次出現字符 c(一個無符號字符)的位置。*/char str1[10] = "poiuyoor";char *cp1 = (char *)memchr(str1, 'o', 8);puts(cp1);/*int memcmp(const void *str1, const void *str2, size_t n)把 str1 和 str2 的前 n 個字節進行比較。返回值如果返回值 < 0,則表示 str1 小于 str2。如果返回值 > 0,則表示 str1 大于 str2。如果返回值 = 0,則表示 str1 等于 str2。*/char str2[10] = "poiuyppp";if (!memcmp(str1, str2, 5)){printf("前5個字符一樣....\n");}/*void *memset(void *str, int c, size_t n)將指定的值 c 復制到 str 所指向的內存區域的前 n 個字節中。*/cp1=(char*)memset(str1,'t',3);puts(cp1);return 0;
}

3. math.h

簡介

math.h?頭文件定義了各種數學函數和一個宏。在這個庫中所有可用的功能都帶有一個?double?類型的參數,且都返回?double?類型的結果。

<math.h>?是 C 標準庫中的一個頭文件,包含了大量用于數學運算的函數和宏。這些函數和宏提供了基本的算術運算、三角函數、指數函數、對數函數、冪函數、舍入函數等。


函數列表:

序號函數 & 描述
1double acos(double x)
返回以弧度表示的 x 的反余弦。
2double asin(double x)
返回以弧度表示的 x 的反正弦。
3double atan(double x)
返回以弧度表示的 x 的反正切。
4double atan2(double y, double x)
返回以弧度表示的 y/x 的反正切。y 和 x 的值的符號決定了正確的象限。
5double cos(double x)
返回弧度角 x 的余弦。
6double cosh(double x)
返回 x 的雙曲余弦。
7double sin(double x)
返回弧度角 x 的正弦。
8double sinh(double x)
返回 x 的雙曲正弦。
9double tanh(double x)
返回 x 的雙曲正切。
10double exp(double x)
返回 e 的 x 次冪的值。
11double frexp(double x, int *exponent)
把浮點數 x 分解成尾數和指數。返回值是尾數,并將指數存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent。
12double ldexp(double x, int exponent)
返回 x 乘以 2 的 exponent 次冪。
13double log(double x)
返回 x 的自然對數(基數為 e 的對數)。
14double log10(double x)
返回 x 的常用對數(基數為 10 的對數)。
15double modf(double x, double *integer)
返回值為小數部分(小數點后的部分),并設置 integer 為整數部分。
16double pow(double x, double y)
返回 x 的 y 次冪。
17double sqrt(double x)
返回 x 的平方根。
18double ceil(double x)
返回大于或等于 x 的最小的整數值。
19double fabs(double x)
返回 x 的絕對值。
20double floor(double x)
返回小于或等于 x 的最大的整數值。
21double fmod(double x, double y)
返回 x 除以 y 的余數。

常用數學常量:?

常量描述
M_PI3.14159265358979323846圓周率 π
M_E2.71828182845904523536自然對數的底數 e
M_LOG2E1.44269504088896340736log2(e)
M_LOG10E0.43429448190325182765log10(e)
M_LN20.69314718055994530942ln(2)
M_LN102.30258509299404568402ln(10)
M_PI_21.57079632679489661923π/2
M_PI_40.78539816339744830962π/4
M_1_PI0.318309886183790671541/π
M_2_PI0.636619772367581343082/π
M_2_SQRTPI1.128379167095512573902/√π
M_SQRT21.41421356237309504880√2
M_SQRT1_20.707106781186547524401/√2

示例:?

#include <stdio.h>
#include <math.h>/*
math.h 頭文件定義了各種數學函數和一個宏。在這個庫中所有可用的功能都帶有一個 double 類型的參數,且都返回 double 類型的結果。
<math.h> 是 C 標準庫中的一個頭文件,包含了大量用于數學運算的函數和宏。
這些函數和宏提供了基本的算術運算、三角函數、指數函數、對數函數、冪函數、舍入函數等。
*/int main(int argc, char const *argv[])
{double x=9.0;double y=2.0;double num=-3.7;//計算平方根double res=sqrt(x);printf("平方根:sqrt(%.2f)=%.2f \n",x,res);//冪運算res=pow(x,y);printf("冪運算:pow(%.2f,%.2f)=%.2f \n",x,y,res);//向上取整res=ceil(num);printf("向上取整:ceil(%.2f)=%.2f \n",num,res);//向下取整res=floor(num);printf("向下取整:floor(%.2f)=%.2f \n",num,res);//四舍五入res=round(num);printf("四舍五入:round(%.2f)=%.2f \n",num,res);//絕對值res=fabs(num);printf("絕對值:fabs(%.2f)=%.2f \n",num,res);return 0;
}

4. time.h

簡介:

time.h?頭文件定義了四個變量類型、兩個宏和各種操作日期和時間的函數。

<time.h>?是 C 標準庫中的一個頭文件,提供了處理和操作日期和時間的函數和類型。這個頭文件中的函數用于獲取當前時間、設置時間、格式化時間和計算時間差等。

函數列表:

序號函數 & 描述
1char *asctime(const struct tm *timeptr)
返回一個指向字符串的指針,它代表了結構 timeptr 的日期和時間。
2clock_t clock(void)
返回程序執行起(一般為程序的開頭),處理器時鐘所使用的時間。
3char *ctime(const time_t *timer)
返回一個表示當地時間的字符串,當地時間是基于參數 timer。
4double difftime(time_t time1, time_t time2)
返回 time1 和 time2 之間相差的秒數 (time1-time2)。
5struct tm *gmtime(const time_t *timer)
timer 的值被分解為 tm 結構,并用協調世界時(UTC)也被稱為格林尼治標準時間(GMT)表示。
6struct tm *localtime(const time_t *timer)
timer 的值被分解為 tm 結構,并用本地時區表示。
7time_t mktime(struct tm *timeptr)
把 timeptr 所指向的結構轉換為一個依據本地時區的 time_t 值。
8size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
根據 format 中定義的格式化規則,格式化結構 timeptr 表示的時間,并把它存儲在 str 中。
9time_t time(time_t *timer)
計算當前日歷時間,并把它編碼成 time_t 格式。
10int timespec_get(struct timespec *ts, int base);
獲取當前時間(C11)。

示例:

#include <stdio.h>
#include <time.h>/*
time.h 頭文件定義了四個變量類型、兩個宏和各種操作日期和時間的函數。<time.h> 是 C 標準庫中的一個頭文件,提供了處理和操作日期和時間的函數和類型。
這個頭文件中的函數用于獲取當前時間、設置時間、格式化時間和計算時間差等。
*/int main(int argc, char const *argv[])
{/*time_t time(time_t *timer)計算當前日歷時間,并把它編碼成 time_t 格式。*/time_t current_time; // 聲明time(&current_time); // 賦值/*char *ctime(const time_t *timer)返回一個表示當地時間的字符串,當地時間是基于參數 timer。*/printf("當前時間:\n");printf("%s", ctime(&current_time)); // 轉換時間為字符串,當前時區(東八區)// 3.格式化時間/*tm 結構的定義如下:struct tm {int tm_sec;         // 秒,范圍從 0 到 59int tm_min;         //分,范圍從 0 到 59int tm_hour;        //小時,范圍從 0 到 23int tm_mday;        //一月中的第幾天,范圍從 1 到 31int tm_mon;         ///月,范圍從 0 到 11int tm_year;        //自 1900 年起的年數int tm_wday;        //一周中的第幾天,范圍從 0 到 6int tm_yday;        //一年中的第幾天,范圍從 0 到 365int tm_isdst;       //夏令時};*/struct tm *time_info;char time_str[100]; // 聲明/*struct tm *localtime(const time_t *timer)timer 的值被分解為 tm 結構,并用本地時區表示。*/time_info = localtime(&current_time);/*size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)根據 format 中定義的格式化規則,格式化結構 timeptr 表示的時間,并把它存儲在 str 中。*/strftime(time_str, sizeof(time_str), "中國時間:%Y-%m-%d %H:%M:%S\n", time_info);puts(time_str);//延遲3秒printf("等待3秒...\n");struct timespec delay={3,0};/*int nanosleep(const struct timespec *req,struct timespec *rem);休眠指定的時間*/nanosleep(&delay,NULL);//更新時間time(&current_time);//賦值當前時間printf("更新后的時間:%s", ctime(&current_time));return 0;
}

5. stdlib.h

簡介:

stdlib .h?頭文件定義了四個變量類型、一些宏和各種通用工具函數。

<stdlib.h>?是 C 標準庫中的一個頭文件,提供了許多通用工具函數,包括內存分配、進程控制、排序和搜索、以及字符串轉換等。

庫宏 :

序號宏 & 描述
1NULL
這個宏是一個空指針常量的值。
2EXIT_FAILURE
這是 exit 函數失敗時要返回的值。
3EXIT_SUCCESS
這是 exit 函數成功時要返回的值。
4RAND_MAX
這個宏是 rand 函數返回的最大值。
5MB_CUR_MAX
這個宏表示在多字節字符集中的最大字符數,不能大于 MB_LEN_MAX。

函數列表:

序號函數 & 描述
1double atof(const char *str)
把參數?str?所指向的字符串轉換為一個浮點數(類型為 double 型)。
2int atoi(const char *str)
把參數?str?所指向的字符串轉換為一個整數(類型為 int 型)。
3long int atol(const char *str)
把參數?str?所指向的字符串轉換為一個長整數(類型為 long int 型)。
4double strtod(const char *str, char **endptr)
把參數?str?所指向的字符串轉換為一個浮點數(類型為 double 型)。
5long int strtol(const char *str, char **endptr, int base)
把參數?str?所指向的字符串轉換為一個長整數(類型為 long int 型)。
6unsigned long int strtoul(const char *str, char **endptr, int base)
把參數?str?所指向的字符串轉換為一個無符號長整數(類型為 unsigned long int 型)。
7void *calloc(size_t nitems, size_t size)
分配所需的內存空間,并返回一個指向它的指針。
8void free(void *ptr)
釋放之前調用?calloc、malloc?或?realloc?所分配的內存空間。
9void *malloc(size_t size)
分配所需的內存空間,并返回一個指向它的指針。
10void *realloc(void *ptr, size_t size)
嘗試重新調整之前調用?malloc?或?calloc?所分配的 ptr 所指向的內存塊的大小。
11void abort(void)
使一個異常程序終止。
12int atexit(void (*func)(void))
當程序正常終止時,調用指定的函數?func
13void exit(int status)
使程序正常終止。
14char *getenv(const char *name)
搜索 name 所指向的環境字符串,并返回相關的值給字符串。
15int system(const char *string)
由 string 指定的命令傳給要被命令處理器執行的主機環境。
16void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))
執行二分查找。
17void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
數組排序。
18int abs(int x)
返回 x 的絕對值。
19div_t div(int numer, int denom)
分子除以分母。
20long int labs(long int x)
返回 x 的絕對值。
21ldiv_t ldiv(long int numer, long int denom)
分子除以分母。
22int rand(void)
返回一個范圍在 0 到?RAND_MAX?之間的偽隨機數。
23void srand(unsigned int seed)
該函數播種由函數?rand?使用的隨機數發生器。
24int mblen(const char *str, size_t n)
返回參數?str?所指向的多字節字符的長度。
25size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)
把參數?str?所指向的多字節字符的字符串轉換為參數?pwcs?所指向的數組。
26int mbtowc(wchar_t *pwc, const char *str, size_t n)
檢查參數?str?所指向的多字節字符。
27size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)
把數組?pwcs?中存儲的編碼轉換為多字節字符,并把它們存儲在字符串?str?中。
28int wctomb(char *str, wchar_t wchar)
檢查對應于參數?wchar?所給出的多字節字符的編碼。

示例:

#include <stdio.h>  //IO操作
#include <stdlib.h> //系統工具
#include <time.h>   //時間/*
stdlib .h 頭文件定義了四個變量類型、一些宏和各種通用工具函數。
<stdlib.h> 是 C 標準庫中的一個頭文件,
提供了許多通用工具函數,包括內存分配、進程控制、排序和搜索、以及字符串轉換等。
*/int compare_int(const void *a, const void *b);int main(int argc, char const *argv[])
{// 動態內存分配/*void *calloc(size_t nitems, size_t size)分配所需的內存空間,并返回一個指向它的指針。void free(void *ptr)釋放之前調用 calloc、malloc 或 realloc 所分配的內存空間。void *malloc(size_t size)分配所需的內存空間,并返回一個指向它的指針。void *realloc(void *ptr, size_t size)嘗試重新調整之前調用 malloc 或 calloc 所分配的 ptr 所指向的內存塊的大小。*//*1	double atof(const char *str)把參數 str 所指向的字符串轉換為一個浮點數(類型為 double 型)。2	int atoi(const char *str)把參數 str 所指向的字符串轉換為一個整數(類型為 int 型)。3	long int atol(const char *str)把參數 str 所指向的字符串轉換為一個長整數(類型為 long int 型)。4	double strtod(const char *str, char **endptr)把參數 str 所指向的字符串轉換為一個浮點數(類型為 double 型)。5	long int strtol(const char *str, char **endptr, int base)把參數 str 所指向的字符串轉換為一個長整數(類型為 long int 型)。*/char str1[] = "1234";char str2[] = "1000abcd";int num1;long num2;// 使用atoi轉換為int類型num1 = atoi(str1);printf("atoi: %d\n", num1);// 使用strtol 轉換為long類型num2 = strtol(str2, NULL, 10);printf("strtol: %ld\n", num2);// 3.生成隨機數/*22	int rand(void)返回一個范圍在 0 到 RAND_MAX 之間的偽隨機數。23	void srand(unsigned int seed)該函數播種由函數 rand 使用的隨機數發生器。*/int i2;// 設置隨機數種子srand(time(NULL));// 生成5隨機數for (i2 = 0; i2 < 5; i2++){printf("%d ", rand() % 100); // 生成0~99之間的隨機數}printf("\n");// 4.數學函數/*18	int abs(int x)返回 x 的絕對值。long int labs(long int x)返回 x 的絕對值。*/int x = -10;long y = -10000000000L;printf("abc(%d)=%d \n", x, abs(x));printf("labc(%ld)=%ld \n", y, labs(y));// 5.執行系統命令system/*15	int system(const char *string)由 string 指定的命令傳給要被命令處理器執行的主機環境。*/printf("執行系統命令system  ls:\n");system("ls");//在linux上執行ls  查看文件和目錄/*6.13	void exit(int status)使程序正常終止。*/printf("1 異常結束,0 正常結束\n");//exit(EXIT_SUCCESS);//printf("---------------------------------\n");/*16	void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))執行二分查找。17	void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))數組排序。*/int arr[]={42,85,19,75,66,67};int length=sizeof(arr)/sizeof(arr[0]);int key=750;int *item;//使用qsort排序qsort(arr,length,sizeof(int),compare_int);printf("排序后的數組:\n");for (int i = 0; i < length; i++){printf("%d ",arr[i]);}printf("\n");//bsearch搜索,沒找到返回NULL指針item=(int*)bsearch(&key,arr,length,sizeof(int),compare_int);if (item!=NULL){printf("*item=%d \n",*item);}else{//NULL代表falseprintf("item=%p \n",item);}return 0;
}int compare_int(const void * a, const void* b){return *(int*)a-*(int*)b;
}

6. ctype.h

簡介:

C 標準庫的?ctype.h?頭文件提供了一些函數,可用于測試和轉換字符,這些函數主要用于檢查字符的類型(如字母、數字、空白字符等)以及進行字符大小寫轉換。

庫宏:

函數列表:

序號函數 & 描述
1int isalnum(int c)
該函數檢查所傳的字符是否是字母和數字。
2int isalpha(int c)
該函數檢查所傳的字符是否是字母。
3int iscntrl(int c)
該函數檢查所傳的字符是否是控制字符。
4int isdigit(int c)
該函數檢查所傳的字符是否是十進制數字。
5int isgraph(int c)
該函數檢查所傳的字符是否有圖形表示法。
6int islower(int c)
該函數檢查所傳的字符是否是小寫字母。
7int isprint(int c)
該函數檢查所傳的字符是否是可打印的。
8int ispunct(int c)
該函數檢查所傳的字符是否是標點符號字符。
9int isspace(int c)
該函數檢查所傳的字符是否是空白字符。
10int isupper(int c)
該函數檢查所傳的字符是否是大寫字母。
11int isxdigit(int c)
該函數檢查所傳的字符是否是十六進制數字。
序號函數 & 描述轉換函數
1int tolower(int c)
該函數把大寫字母轉換為小寫字母。
2int toupper(int c)
該函數把小寫字母轉換為大寫字母。

示例:

#include <stdio.h>
#include <ctype.h> //試和轉換字符  的頭文件/*
C 標準庫的 ctype.h 頭文件提供了一些函數,可用于測試和轉換字符,
這些函數主要用于檢查字符的類型(如字母、數字、空白字符等)以及進行字符大小寫轉換。
<ctype.h> 提供了一組方便的函數,用于處理字符的分類和轉換操作,是 C 標準庫中處理字符操作的重要工具。
*/int main(int argc, char const *argv[])
{char ch = 'A';/*2	int isalpha(int c)該函數檢查所傳的字符是否是字母。*/if (isalpha(ch)){printf("%c\n", ch);}else{printf("我不是字母...\n");}/*4	int isdigit(int c)該函數檢查所傳的字符是否是十進制數字。 字符串的數字*/char ch2 = '5';if (isdigit(ch2)){printf("%c\n", ch2);}else{printf("我不是數字...\n");}/*1	int tolower(int c)該函數把大寫字母轉換為小寫字母。2	int toupper(int c)該函數把小寫字母轉換為大寫字母。*/ch2='H';printf("%c\n",tolower(ch2));ch2='i';printf("%c\n",toupper(ch2));return 0;
}

7. errno.h

簡介:

C 標準庫的?errno.h?頭文件定義了整數變量?errno,它是通過系統調用設置的,在錯誤事件中的某些庫函數表明了什么發生了錯誤。該宏擴展為類型為 int 的可更改的左值,因此它可以被一個程序讀取和修改。

<errno.h>?是 C 標準庫中的一個頭文件,提供了一種在程序中報告和處理錯誤的機制。這個頭文件定義了宏和變量,用于指示和描述運行時錯誤的類型。

errno.h?頭文件定義了一系列表示不同錯誤代碼的宏,這些宏應擴展為類型為?int?的整數常量表達式。

errno?是一個全局變量,用于存儲最近發生的錯誤代碼。這個變量的類型為?int。當一個庫函數發生錯誤時,它通常會設置?errno?以指示錯誤類型。

例如,在文件操作中,如果?fopen?函數因為文件不存在而失敗,它會將?errno?設置為?ENOENT

常用錯誤碼

以下是一些常見的錯誤碼,它們在?<errno.h>?中定義為宏:

  • EPERM:操作不允許
  • ENOENT:沒有這樣的文件或目錄
  • ESRCH:沒有這樣的進程
  • EINTR:中斷的系統調用
  • EIO:輸入/輸出錯誤
  • ENXIO:沒有這樣的設備或地址
  • E2BIG:參數列表太長
  • ENOMEM:內存不足
  • EACCES:權限被拒絕
  • EFAULT:壞的地址
  • EBUSY:資源忙
  • EEXIST:文件已存在
  • EXDEV:跨設備鏈接
  • ENODEV:沒有這樣的設備
  • ENOTDIR:不是一個目錄
  • EISDIR:是一個目錄
  • EINVAL:無效的參數
  • ENFILE:系統文件表溢出
  • EMFILE:打開的文件過多
  • ENOTTY:不是終端設備
  • ETXTBSY:文本文件忙
  • EFBIG:文件過大
  • ENOSPC:設備上沒有空間
  • ESPIPE:非法的尋址
  • EROFS:只讀文件系統
  • EMLINK:鏈接過多
  • EPIPE:管道破裂

注意事項

  1. 線程安全:在多線程程序中,errno?通常實現為線程局部存儲(Thread-Local Storage, TLS),以確保每個線程有獨立的錯誤碼。
  2. 初始值:在成功調用的情況下,庫函數通常不會修改?errno?的值。因此在檢查錯誤之前,應確保?errno?被設置為 0。
  3. 錯誤碼范圍:不同的操作系統和 C 標準庫實現可能會定義額外的錯誤碼。程序應避免依賴特定錯誤碼的數值。

錯誤處理建議

  1. 檢查返回值:在調用可能失敗的函數時,總是檢查其返回值。
  2. 設定?errno?為 0:在調用一個函數前,可以將?errno?設定為 0,以便在調用后檢查?errno?是否被修改。
  3. 使用?strerror:通過?strerror?將?errno?轉換為可讀的字符串,便于調試和日志記錄。

總之,<errno.h>?提供了一種標準化的方式來報告和處理程序中的錯誤,使得錯誤處理代碼更為一致和可維護。

宏列表:

序號宏 & 描述
1extern int errno
這是通過系統調用設置的宏,在錯誤事件中的某些庫函數表明了什么發生了錯誤。
2EDOM Domain Error
這個宏表示一個域錯誤,它在輸入參數超出數學函數定義的域時發生,errno 被設置為 EDOM。
3ERANGE Range Error
這個宏表示一個范圍錯誤,它在輸入參數超出數學函數定義的范圍時發生,errno 被設置為 ERANGE。

示例:

#include <stdio.h>#include <assert.h>  //斷言
#include <errno.h>  //錯誤處理/*
C 標準庫的 assert.h頭文件提供了一個名為 assert 的宏,它可用于驗證程序做出的假設,并在假設為假時輸出診斷消息。
assert.h 標準庫主要用于在程序運行時進行斷言斷言是一種用于測試假設的手段,通常用于調試階段,以便在程序出現不符合預期的狀態時立即發現問題。
<assert.h> 提供的斷言機制是 C 語言中一個有用的工具,幫助開發人員在早期發現和修復程序中的錯誤。
已定義的宏 assert 指向另一個宏 NDEBUG,宏 NDEBUG 不是 <assert.h> 的一部分。
如果已在引用 <assert.h> 的源文件中定義 NDEBUG 為宏名稱,則 assert 宏的定義如下:assert(expression)
assert 宏用于測試表達式 expression 是否為真。如果 expression 為假(即結果為 0),assert 會輸出一條錯誤信息并終止程序的執行。
這個錯誤信息包括以下內容:觸發斷言失敗的表達式
源文件名
行號
在發布版本中,可以通過定義 NDEBUG 來禁用所有的 assert 斷言。assertde行為是:
符合條件(表達式為真):程序繼續正常執行;
不符合條件(表達式為假):程序立即終止,并輸出一條錯誤信息,包括失敗的表達式、文件名和行號。重要注意事項:
調試節點使用:assert 通常在開發和調試階段使用,用于不活程序中邏輯錯誤,它可以驗證程序的假設是否成立。生產環境:再生產環境中,一般禁用assert。可以通過定義 NDEBUG 宏來禁用所有斷言;#define NDEBUG#inclue <assert.h>
代替方案:在生產代碼中,通常使用更健壯的錯誤處理機制,例如 if語句和errno。C 標準庫的 errno.h 頭文件定義了整數變量 errno,它是通過系統調用設置的,在錯誤事件中的某些庫函數表明了什么發生了錯誤。
該宏擴展為類型為 int 的可更改的左值,因此它可以被一個程序讀取和修改。
<errno.h> 是 C 標準庫中的一個頭文件,提供了一種在程序中報告和處理錯誤的機制。
這個頭文件定義了宏和變量,用于指示和描述運行時錯誤的類型。errno.h 頭文件定義了一系列表示不同錯誤代碼的宏,這些宏應擴展為類型為 int 的整數常量表達式。
errno 是一個全局變量,用于存儲最近發生的錯誤代碼。這個變量的類型為 int。
當一個庫函數發生錯誤時,它通常會設置 errno 以指示錯誤類型。例如,在文件操作中,如果 fopen 函數因為文件不存在而失敗,它會將 errno 設置為 ENOENT。*/int main(int argc, char const *argv[])
{   //1.入門 斷言int x=10;int y=0;//斷言assert符合條件繼續執行assert(x==10);printf("x是10,程序正常繼續執行......\n");//斷言assert 不符合條件,程序終止并輸出錯誤信息//assert(y!=0);//printf("y!=0......程序終止并輸出錯誤信息\n");//2.進階 斷言FILE *file;//打開文件file=fopen("不存在的文件.txt","r");if (file==NULL){//文件大失敗,檢查  errnoperror("打開文件失敗");     }else{printf("打開文件成功...\n");fclose(file);}//斷言文件不存在assert(errno==ENOENT);//ENOENT (2): 文件或目錄不存在。//符合條件(斷言表達式為真):件程序繼續正常執行printf("符合條件(斷言表達式為真):件程序繼續正常執行 \n");return 0;
}

8. signal.h

簡介:

<signal.h>?是 C 標準庫中的一個頭文件,用于處理信號。

signal.h?頭文件定義了一個變量類型?sig_atomic_t、兩個函數調用和一些宏來處理程序執行期間報告的不同信號。

信號是一種異步通知機制,允許進程在特定事件發生時執行預定義的處理函數。

下面是一個簡單的示例程序,演示如何使用 signal 函數來捕捉 SIGINT 信號(通常由 Ctrl+C 產生)。

函數列表:

常量描述
SIGABRT由?abort?函數產生的信號,表示異常終止
SIGALRM由?alarm?函數設定的定時器到期信號
SIGBUS非法內存訪問(例如,訪問未對齊的內存地址)
SIGCHLD子進程狀態改變(退出或停止)
SIGCONT繼續執行被暫停的進程
SIGFPE算術錯誤(例如,除零錯誤、浮點異常)
SIGHUP掛起信號(通常用于檢測終端斷開)
SIGILL非法指令
SIGINT中斷信號(通常由 Ctrl+C 產生)
SIGKILL立即終止信號(不能被捕捉或忽略)
SIGPIPE向無讀進程的管道寫數據
SIGQUIT終端退出信號(通常由 Ctrl+\ 產生),生成核心轉儲
SIGSEGV段錯誤(非法內存訪問)
SIGSTOP停止進程的執行(不能被捕捉或忽略)
SIGTERM終止信號
SIGTSTP暫停進程(通常由 Ctrl+Z 產生)
SIGTTIN后臺進程從終端讀數據時產生的信號
SIGTTOU后臺進程向終端寫數據時產生的信號
SIGUSR1用戶自定義信號 1
SIGUSR2用戶自定義信號 2
SIGPOLLI/O 事件(取代 SIGIO)
SIGPROF定時器到期信號(由?setitimer?設置的 profiling timer)
SIGSYS非法系統調用
SIGTRAP斷點或陷阱指令
SIGURG套接字緊急條件信號
SIGVTALRM虛擬時鐘定時器到期信號
SIGXCPU超過 CPU 時間限制
SIGXFSZ超過文件大小限制

示例:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81390.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81390.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81390.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unbuntu 命令

Ubuntu 命令速查表? ?分類??命令??功能描述??示例/常用選項????文件與目錄?ls列出目錄內容ls -a&#xff08;顯示隱藏文件&#xff09;; ls -lh&#xff08;詳細列表易讀大小&#xff09; cd切換目錄cd ~&#xff08;主目錄&#xff09;; cd ..&#xff08;上級…

怎么在excel單元格1-5行中在原來內容前面加上固定一個字?

環境&#xff1a; WPS 2024 問題描述&#xff1a; 怎么在excel單元格1-5行中在原來內容前面加上固定一個字&#xff1f; 解決方案&#xff1a; 1.在Excel中&#xff0c;如果您想在單元格的內容前面添加一個固定的字&#xff0c;可以通過以下幾種方法實現&#xff1a; 方法…

Linux zip、unzip 壓縮和解壓

zip 命令用于壓縮文件&#xff0c;壓縮后的文件后綴名為 .zip 。 對應的解壓命令是 unzip 。 測試用的目錄結構如下&#xff0c; userzn:~/test$ tree . ├── folder1 │ ├── folder111 │ │ └── file1.txt │ └── main1.c ├── folder2 │ ├── …

【C語言練習】047. 理解遞歸與循環的轉換

047. 理解遞歸與循環的轉換 047. 理解遞歸與循環的轉換1. 遞歸與循環的基本概念遞歸循環2. 遞歸與循環的轉換示例1:計算階乘示例2:漢諾塔問題3. 遞歸與循環的適用場景遞歸:循環:一、遞歸的適用場景與代碼示例1. 分治問題2. 樹形結構遍歷3. 復雜狀態問題二、循環的適用場景與…

我的創作紀念日——《驚變256天》

我的創作紀念日——《驚變256天》 機緣收獲日常成就憧憬 最近&#xff0c;博主收到了 CSDN 發來的系統消息&#xff0c;這才驚覺&#xff0c;自上次第128天創作紀念日之后&#xff0c;竟又悄然走過了 128 天。站在 256 天這個頗具意義的里程碑前回望&#xff0c;博主在2023 年 …

Redis 事務與管道:原理、區別與應用實踐

在現代分布式系統開發中&#xff0c;Redis 作為高性能的內存數據庫&#xff0c;其事務處理和管道技術是開發者必須掌握的核心知識點。本文將深入探討 Redis 事務和管道的實現原理、使用場景、性能差異以及最佳實踐&#xff0c;幫助開發者根據實際需求選擇合適的技術方案。 一、…

Mysql 8.0.32 union all 創建視圖后中文模糊查詢失效

記錄問題,最近在使用union all聚合了三張表的數據,創建視圖作為查詢主表,發現字段值為中文的篩選無法生效.......... sql示例: CREATE OR REPLACE VIEW test_view AS SELECTid,name,location_address AS address,type,"1" AS data_type,COALESCE ( update_time, cr…

Spatial Transformer Layer

我們知道cnn是無法識別到經過縮放和旋轉的圖片的,但是這個spatial transformer這個neutral network是可以做到的,可以被放到cnn里 接下來就是講解一個空間變換層地例子:我們可以看到,layerl就是layerl-1經過平移得到的,其中,我們layerl中的每一個元素,是上一層每一個元素與權重…

spark-standalone

一、定義&#xff1a;Standalone 模式是一種獨立的集群部署模式&#xff0c;自帶完整服務&#xff0c;可單獨部署到一個集群中&#xff0c;無需依賴任何其他資源管理系統。 二、配置步驟 1.和前面一樣拉到hadoop101的/opt/module這個目錄里面。 2.壓縮 3.重命名為spark-sta…

Vim編輯器命令模式操作指南

Vim 的命令模式&#xff08;即 Normal 模式&#xff09;是 Vim 的核心操作模式&#xff0c;用于執行文本編輯、導航、搜索、保存等操作。以下是命令模式下的常用操作總結&#xff1a; 1. 模式切換 進入命令模式&#xff1a;在任何模式下按 Esc 鍵&#xff08;可能需要多次按&a…

網絡體系結構(OSI,TCP/IP)

網絡體系結構 一、設計分層網絡模型 簡化設計&#xff1a;分層將復雜的大系統分解成小模塊&#xff0c;每一層專注處理特定功能模塊化&#xff1a;每一層獨立&#xff0c;便于開發、調試、更新和維護互操作&#xff1a;不同廠家、不同系統之間可以互相兼容&#xff0c;統一標…

經典 算法

算法 算法&#xff08;Algorithm&#xff09;是指解題方案的準確而完整的描述&#xff0c;是一系列解決問題的清晰指令。簡單來說&#xff0c;算法 就是解決一個問題的具體方法和步驟。在計算機科學中&#xff0c;算法是程序設計的核心&#xff0c;它決定了程序如何執 行特定的…

【Spark】-- DAG 和寬窄依賴的核心

目錄 Spark DAG 和寬窄依賴的核心 一、什么是 DAG? 示例:WordCount 程序的 DAG 二、寬依賴與窄依賴 1. 窄依賴 2. 寬依賴 三、DAG 與寬窄依賴的性能優化 1. 減少 Shuffle 操作 2. 合理劃分 Stage 3. 使用緩存機制 四、實際案例分析:同行車判斷 五、總結 Spark D…

C#中UI線程的切換與后臺線程的使用

文章速覽 UI線程切換示例 后臺線程使用示例 兩者對比適用場景Application.Current.Dispatcher.InvokeTask.Factory.StartNew 執行同步性Application.Current.Dispatcher.InvokeTask.Factory.StartNew 一個贊&#xff0c;專屬于你的足跡&#xff01; UI線程切換 在WPF應用程序…

【HTML】個人博客頁面

目錄 頁面視圖?編輯 頁面代碼 解釋&#xff1a; HTML (<body>): 使用了更加語義化的HTML5標簽&#xff0c;例如<header>, <main>, <article>, <footer>。文章列表使用了<article>包裹&#xff0c;結構清晰。添加了分頁導航。使用了Font…

第J1周:ResNet-50算法實戰與解析

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 我的環境 語言環境:Python3.8 編譯器:Jupyter Lab 深度學習環境:Pytorchtorch1.12.1cu113 torchvision0.13.1cu113 一、準備工作 二、導入數據 三、劃分數據…

養生:健康生活的極簡攻略

在追求高效生活的當下&#xff0c;養生也能化繁為簡。通過飲食、運動、睡眠與心態的精準調節&#xff0c;就能輕松為健康續航。 飲食上&#xff0c;遵循 “均衡、節制” 原則。早餐用一杯熱豆漿搭配水煮蛋和半個蘋果&#xff0c;喚醒腸胃活力&#xff1b;午餐以糙米飯為主食&am…

遷移 Visual Studio Code 設置和擴展到 VSCodium

本文同步發布在個人博客 遷移 Visual Studio Code 設置和擴展到 VSCodium - 萑澈的寒舍https://hs.cnies.org/archives/vscodium-migrateVisual Studio Code&#xff08;以下簡稱 VS Code&#xff09;無疑是當下最常用的代碼編輯器。盡管微軟的 VS Code 源代碼采用 MIT 協議開…

力扣654題:最大二叉樹(遞歸)

小學生一枚&#xff0c;自學信奧中&#xff0c;沒參加培訓機構&#xff0c;所以命名不規范、代碼不優美是在所難免的&#xff0c;歡迎指正。 標簽&#xff1a; 二叉樹、遞歸 語言&#xff1a; C 題目&#xff1a; 給定一個不重復的整數數組 nums 。最大二叉樹可以用下面的算…

離散制造企業WMS+MES+QMS+條碼管理系統高保真原型全解析

在離散型制造企業的生產過程中&#xff0c;庫存管理混亂、生產進度不透明、質檢流程繁瑣等問題常常成為制約企業發展的瓶頸。為了幫助企業實現全流程數字化管控&#xff0c;我們精心打造了一款基于離散型制造企業&#xff08;涵蓋單件生產、批量生產、混合生產模式&#xff09;…