主頁 >  其他 > C語言基礎系列: 預處理+檔案操作

C語言基礎系列: 預處理+檔案操作

2021-02-01 12:20:47 其他

本人大一學生,以下文章作為學習筆記用于加深記憶和復習,并分享給其他需要的人.
內容不含標準概念,更容易理解.
內容面向c語言初學者

一. 預處理

一. 什么是預處理

代碼執行之前的事情,命令以#開頭

二. 常見的預處理

頭檔案

三. #define

是C語言的宏定義,本質是替換,會在預處理階段對程式中所有出現的"宏名"的地方進行替換

一 宏替換

1.定義

#define 宏名 內容

#define PI 3.14159 //定義PI為3.14159 相當于給常量起名
#define NUM 3+1
int main(){
    int n = NUM * NUM;      //拆解 : 3 + 1 * 3 + 1 
    printf("n = %d\n", n);  //結果 : 7
    return 0;
}

二 帶參宏

  1. 定義

#define 宏名(形參串列) 內容

#define ADD(a,b) a+b
  1. 舉例
#include <stdio.h>

// #define 宏名(形參串列) 內容
#define ADD(a,b) a+b
#define ADD1(a,b) (a+b)
// 注意:沒有引數型別 沒有回傳值 本質:替換
int main()
{                                       // 拆解: n = a + b ;
int n = ADD(1,2);                       // 拆解: 1 + 2
printf("n = %d\n", n);                  // 結果: 3
n = ADD(1, ADD(5, 6))*ADD(3, 4);        // 拆解: 1 + 5 + 6 * 3 + 4
printf("n = %d\n", n);                  // 結果: 28
n = ADD1(1, ADD1(5, 6))*ADD1(3, 4);     // 拆解: ( 1 + (5 + 6) ) * (3 + 4)
printf("n = %d\n", n);                  // 結果: 84
double d = ADD(1.223, 2.456);           // 拆解: 1.223 + 2.456
printf("d = %lf\n", d);                 // 結果: 3.679000
return 0;
}

四 預編譯條件

一 #ifdef 宏名

語法:
#ifdef 宏名
    代碼塊;
#endif
規則:

根據宏名是否定義,如果定義了,就會執行代碼塊直到endif,否則不執行代碼塊

舉例:
#include <stdio.h>

#define def_1 1;            // 宏定義 def_1

int main()
{
    #ifdef AAA            // 判斷 def_1 宏名以被定義 執行代碼塊內容
    printf("宏名以被定義\n");
    #endif // AAA         // 結束宏判斷
    
    return 0;
}

#include<stdio.h>

#define def_1 1                   // 宏定義 def_1

int main() {
                                 
#ifdef def_1                      // 判斷是否定義宏名 def_1
	printf("以定義宏名 def_1");     // 結果
#else
	printf("未定義宏名 def_1");
#endif
	return 0;
}

二 #ifndef 宏名

語法
#ifndef 宏名
    代碼塊;
#else
    代碼塊;
#endif
規則: ( 與 ifdef 類似且相反 )

根據宏名是否定義,如果沒有定義,就會執行相對代碼直到endif,否則不執行代碼塊

舉例:
#include<stdio.h>

#define def_1 1                    // 宏定義 def_1

int main() {

#ifndef def_1                      // 判斷是否定義宏名 def_1
	printf("未定義宏名 def_1");
#else
	printf("以定義宏名 def_1");      // 結果
#endif
	return 0;
}
常用事件:

令某代碼永遠只執行一次:

#ifndef def_1
#define def_1
     //代碼塊
#endif

三 #if 運算式

語法:
#if(運算式)
// 代碼塊1;
#else
// 代碼塊2;
#endif
規則:

如果運算式為真 , 執行代碼塊 1 ,否則執行代碼塊 2.

舉例:
#include <stdio.h>

int main() {
    
#if(1)
	printf("yes\n");
#else
	printf("no\n");
#endif
    
    return 0;
}

二 檔案操作

一 什么是檔案

ps:除了檔案夾,都是檔案

檔案的后綴名: .docx .txt .c .cpp .exe .bat .csv …

二 檔案名

名字.后綴

三 檔案路徑

1 相對路徑: 從當前專案開始到目標檔案

2 絕對路徑: 從根目錄開始到目標檔案

以: 路徑 + 名字.后綴 來確定檔案

四 操作檔案 ( 正文開始 )

更多內容參考:https://www.runoob.com/cprogramming/c-file-io.html

     1、定義檔案指標  FILE*file;
     2、open(“路徑”,“打開方式”)打開檔案
     3、檔案的打開方式
         “r”(只讀) 為了輸入資料,打開一個已存在的文本檔案 出錯
         “w”(只寫) 為了輸出資料,打開一個文本檔案 新建檔案
         “a”(追加) 向文本檔案尾部添加資料 出錯
         “rb”(只讀) 為了輸入資料,打開一個已存在的二進制檔案 出錯
         “wb”(只寫) 為了輸出資料,打開一個二進制檔案 新建檔案
         “ab”(追加) 向二進制檔案尾部添加資料 出錯
         “r+”(讀寫) 為了讀和寫,打開一個文本檔案 出錯
         “w+”(讀寫) 為了讀和寫,打開一個文本檔案 新建檔案
         “a+”(讀寫) 為了讀和寫,打開一個文本檔案 出錯
         “rb+”(讀寫) 為了讀和寫,打開一個二進制檔案 出錯
         “wb+”(讀寫) 為了讀和寫,打開一個二進制檔案 新建檔案
         “ab+”(讀寫) 為了讀和寫,打開一個二進制檔案 出錯
     4fclose()關閉檔案
     5、fgetc(檔案指標) 讀取一個字符
     6fputc(字符,檔案指標) 寫入一個字符
     7、fgets(字符指標,大小,檔案指標) 讀取一行字符,讀n個
     8fpust(字串,檔案指標) 寫入一串字符
     9fprintf(檔案指標,"格式占位符...",變數...);  格式化寫入檔案
    10fscanf(檔案指標,“格式占位符...",變數...); 格式化讀取
以二進制方式讀寫資料
    11fread(用來保存的字符陣列,資料型別的大小,資料的個數,檔案指標);從檔案中獲取格式化的
資料
    12fwrite(需要寫進去字符陣列, 資料型別的大小,資料的個數, 檔案指標);向檔案中寫入資料
    13fseek(檔案指標,偏移量,起始點);  移動檔案指標
        偏移量為正數往后移動,負數往前移動
        起始點用012代替
            0SEEK_SET)代表檔案開始位置
            1SEEK_CUR)代表當前位置
            2SEEK_END )代表檔案末尾位置
    14ftell(檔案指標)  獲取檔案指標的偏移量
    15feof(檔案指標) 判斷檔案指標是否讀到末尾,讀到了末尾回傳真,反之假
              
備注:進行檔案操作的時候,記得檔案怎么寫入的就怎么讀出來,讀寫最好不要同時進行,注意你的操作和打
開方式

一 單個字符讀寫

在 main.c ( 專案源檔案 ) 同檔案夾內 創建tese1.txt檔案

在檔案內鍵入內容:例如: “IAmMuShan”

*此處不建議輸入中文 fgetc() 單個字符讀寫讀取 1 byte ,漢字一個字符一般 2 byte 無法正常讀取

本人代碼新人,此處引文 : https://bbs.csdn.net/topics/390325904

關鍵詞: fgetc(獲取單個字符) putchar (釋放單個字符)

void function1() {
	// 1 定義變數: 檔案指標
	FILE* pfile = NULL;
	char ch = 0;

	// 2 打開檔案(檔案指標指向檔案地址) fopen引數: 檔案路徑,打開方式
	pfile = fopen("text1.txt", "r");   // r 為只讀 此處如果檔案不與代碼源檔案同路徑則填寫路徑

	// 3 讀取(檔案 ==> 程式)
	// 獲取一個字符 fgetc引數: 檔案
	ch = fgetc(pfile);

	// 4 在控制臺輸出讀取字符
	putchar(ch);
	printf("\nch = %c\n", ch);              // 結果 : i

	// 5 繼續向后讀取
	putchar(fgetc(pfile));
	printf("\n%c\n",fgetc(pfile));          // 結果 : a
	// ==> 只需要呼叫方法 會自動向后讀取

	// 6 關閉檔案(取消檔案指標地址指向)
	fclose(pfile);
	pfile = NULL;

	// 7 重新打開檔案
	pfile = fopen("text1.txt", "w");          //以寫的方式打開檔案;

	// 8 將單個字符寫入到檔案(程式 ==> 檔案)
	fputc('X',pfile);
	// ==> 會清除原來的資料 重新寫入
	fputc('Y',pfile);
	// ==> 第一次寫入到關閉之前 會自動依次寫入

	// 9 關閉檔案
	fclose(pfile);
	pfile = NULL;

}

二 字串的讀寫

在 main.c ( 專案源檔案 ) 同檔案夾內 創建tese2.txt檔案

在檔案內鍵入內容:例如: “ILoveYou”

*此處雖然理論如果選擇4個長度就能出來2個漢字的樣子,依舊不建議用中文,根據編譯器不同,可能出現各種亂碼

關鍵詞: fgets(獲取字串) fputs(釋放字串)

void function2() {
	FILE * pfile = NULL;
	char str[20] = { };             //初始化字串陣列

	pfile = fopen("text2.txt","r"); //只讀方式打開檔案

	// 字串讀取函式(檔案 ==> 程式)
	// 引數:存盤目標,長度(byte),資源檔案
	fgets(str , 5 , pfile);
	puts(str);
	printf("%s\n",str);
	// ==> 此處只會出現4個字符 因為'\0'占據一個位置(\0為字串結束的標志)
	
	fclose(pfile);
    pfile = NULL;
    
	pfile = fopen("text2.txt", "a"); // a:追加
	
	char str1[10] = "hello";
	
	// 字符串輸出函式(程式==>檔案)
	// 引數:資源,檔案
	fputs(str1, pfile);
	
	fclose(pfile);
    pfile = NULL;
    
}

三 格式化讀寫

在 main.c ( 專案源檔案 ) 同檔案夾內 創建tese3.txt檔案

特點: 格式化顧名思意會在讀寫時清空初始內容

關鍵詞: fscanf(格式化輸入) fprintf(格式化輸出)

// 三 格式化讀寫
void function3()
{
	FILE* pfile;
	int num0 = 100, num1 = 0;
	float f0 = 1.2f, f1 = 0.0f;
	char str0[10] = "123abc#", str1[10] = {};

	pfile = fopen("text3.txt", "w");      //此處如果檔案未創建或找不到檔案名會在路徑內自動創建

	// 程式==>檔案
	// 引數: 檔案,格式,obj
	fprintf(pfile, "%d,%f,%s", num0, f0, str0);

	fclose(pfile);
	pfile = NULL;

	pfile = fopen("text3.txt", "r");      //此處如果檔案未創建或找不到檔案名 那計算機就懵逼了哈哈哈

	// 檔案==>程式
	fscanf(pfile, "%d,%f,%s", &num1, &f1, &str1);

	printf("%d , %f , %s\n", num1, f1, str1);       //結果:100 , 1.200000 , 123abc#

	fclose(pfile);
	pfile = NULL;
    
}

四 二進制形式讀寫

關鍵詞: fwrite(用于二進制寫入) fread(用于二進制讀取)

// 四 二進制形式讀寫
void function4()
{
	FILE* pfile = NULL;
	int arr0[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int arr1[10] = {};

	pfile = fopen("text4.txt", "wb");         // "wb"為二進制形式寫入
	fwrite(arr0, sizeof(int), 10, pfile);
	fclose(pfile);
	pfile = NULL;

	pfile = fopen("text4.txt", "rb");         // "rb"為二進制形式讀取
	fread(arr1, sizeof(int), 10, pfile);
	for (size_t i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);               // 結果: 0 1 2 3 4 5 6 7 8 9
	}
	fclose(pfile);
	pfile = NULL;

}

由于是二進制讀寫 text4.txt 打開無法查看內容

在這里插入圖片描述

五 指定位置讀寫

通過fseek(偏移函式)改變讀寫位置

關鍵詞: fseek_偏移函式

用法: fseek(檔案指標,偏移量(以位元組為單位),初始位置)

初始位置預處理常量:

SEEK_CUR 1 當前位置

SEEK_END 2 檔案末尾

SEEK_SET 0 檔案開頭

void function5()
{
	FILE* pfile;
	char str[100] = {};
	if ((pfile = fopen("text5.txt", "r")) != NULL)
	{
		printf("檔案打開成功!\n");
	}
	else
	{
		printf("檔案打開失敗!\n");
	}
	// 正常讀取
	putchar(fgetc(pfile));
	putchar('\n');
/*
	C 庫函式 int fseek(FILE *stream, long int offset, int whence)
	設定流 stream 的檔案位置為給定的偏移 offset,
	引數 offset 意味著從給定的 whence 位置查找的位元組數,
	引數:
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	offset -- 這是相對 whence 的偏移量,以位元組為單位,
	whence -- 這是表示開始添加偏移 offset 的位置,它一般指定為下列常量之一:
	SEEK_SET 檔案的開頭
	SEEK_CUR 檔案指標的當前位置
	SEEK_END 檔案的末尾
	#define SEEK_CUR  1
	#define SEEK_END  2
	#define SEEK_SET  0
	回傳值:
	如果成功,則該函式回傳零,否則回傳非零值,
*/
    fseek(pfile, 2, SEEK_END); //使檔案指標指向指定位置
	fgets(str, 6, pfile);
/*
	C 庫函式 int ferror(FILE *stream) 測驗給定流 stream 的錯誤識別符號,
	引數:
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	回傳值:
	如果設定了與流關聯的錯誤識別符號,該函式回傳一個非零值,否則回傳一個零值,
*/
    if (ferror(pfile))
	{
		printf("檔案讀取失敗!\n");
	}
	else
	{
		printf("檔案讀取成功!\n");
	}
	// 列印讀取的內容
	puts(str);
/*
	描述
	C 庫函式 void clearerr(FILE *stream) 清除給定流 stream 的檔案結束和錯誤識別符號,
	引數
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	回傳值
	這不會失敗,且不會設定外部變數 errno,
	但是如果它檢測到它的引數不是一個有效的流,則回傳 -1,并設定 errno 為 EBADF,
*/
	clearerr(pfile); //清除讀取/寫入/ferror函式報錯后出現錯誤的錯誤標志
/*
	描述
	C 庫函式 void rewind(FILE *stream) 設定檔案位置為給定流 stream 的檔案的開頭,
	引數
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	回傳值
	該函式不回傳任何值,
*/
	rewind(pfile);//強制使檔案指標指向檔案開頭
/*
	描述
	C 庫函式 int feof(FILE *stream) 測驗給定流 stream 的檔案結束識別符號,
	引數
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	回傳值
	當設定了與流關聯的檔案結束識別符號時,該函式回傳一個非零值,否則回傳零,
*/
	while (!feof(pfile)) //feof函式判斷是否讀到檔案末尾
	{
		putchar(fgetc(pfile));
	}
	putchar('\n');
	if (fclose(pfile) == EOF)
	{
		printf("檔案關閉失敗!\n");
	}
	else
	{
		printf("檔案關閉成功!\n");
	}
}

完整代碼:

#include<stdio.h>

void function1();   //一. 單個字符讀寫
void function2();   //二. 字串的讀寫

int main() {
	printf("function1:\n");
	function1();
	printf("\nfunction2:\n");
	function2();
	printf("\nfunction3:\n");
	function3();
	printf("\nfunction4:\n");
	function4();
	printf("\nfunction5:\n");
	function5();
}

void function1() {
	// 1 定義變數: 檔案指標
	FILE* pfile = NULL;
	char ch = 0;

	// 2 打開檔案(檔案指標指向檔案地址) fopen引數: 檔案路徑,打開方式
	pfile = fopen("text1.txt", "r");   // r 為只讀 此處如果檔案不與代碼源檔案同路徑則填寫路徑

	// 3 讀取(檔案 ==> 程式)
	// 獲取一個字符 fgetc引數: 檔案
	ch = fgetc(pfile);

	// 4 在控制臺輸出讀取字符
	putchar(ch);
	printf("\nch = %c\n", ch);              // 結果 : i

	// 5 繼續向后讀取
	putchar(fgetc(pfile));
	printf("\n%c\n",fgetc(pfile));          // 結果 : a
	// ==> 只需要呼叫方法 會自動向后讀取

	// 6 關閉檔案(取消檔案指標地址指向)
	fclose(pfile);
	pfile = NULL;

	// 7 重新打開檔案
	pfile = fopen("text1.txt", "w");          //以寫的方式打開檔案;

	// 8 將單個字符寫入到檔案(程式 ==> 檔案)
	fputc('X',pfile);
	// ==> 會清除原來的資料 重新寫入
	fputc('Y',pfile);
	// ==> 第一次寫入到關閉之前 會自動依次寫入

	// 9 關閉檔案
	fclose(pfile);
	pfile = NULL;

}

void function2() {
	FILE * pfile = NULL;
	char str[20] = { };             //初始化字串陣列

	pfile = fopen("text2.txt","r"); //只讀方式打開檔案

	// 字串讀取函式(檔案 ==> 程式)
	// 引數:存盤目標,長度(byte),資源檔案
	fgets(str , 5 , pfile);
	puts(str);
	printf("%s\n",str);
	// ==> 此處只會出現4個字符 因為'\0'占據一個位置(\0為字串結束的標志)

	fclose(pfile);
    pfile = NULL;

	pfile = fopen("text2.txt", "a"); // a:追加

	char str1[10] = "hello";

	// 字串輸出函式(程式==>檔案)
	// 引數:資源,檔案
	fputs(str1, pfile);

	fclose(pfile);
    pfile = NULL;

}

// 三 格式化讀寫
void function3()
{
	FILE* pfile;
	int num0 = 100, num1 = 0;
	float f0 = 1.2f, f1 = 0.0f;
	char str0[10] = "123abc#", str1[10] = {};

	pfile = fopen("text3.txt", "w");

	// 程式==>檔案
	// 引數: 檔案,格式,obj
	fprintf(pfile, "%d,%f,%s", num0, f0, str0);

	fclose(pfile);
	pfile = NULL;

	pfile = fopen("text3.txt", "r");

	// 檔案==>程式
	fscanf(pfile, "%d,%f,%s", &num1, &f1, &str1);

	printf("%d , %f , %s\n", num1, f1, str1);

	fclose(pfile);
	pfile = NULL;
}

// 四 二進制形式讀寫
void function4()
{
	FILE* pfile = NULL;
	int arr0[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int arr1[10] = {};

	pfile = fopen("text4.txt", "wb");
	fwrite(arr0, sizeof(int), 10, pfile);
	fclose(pfile);
	pfile = NULL;

	pfile = fopen("text4.txt", "rb");
	fread(arr1, sizeof(int), 10, pfile);
	for (size_t i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
	fclose(pfile);
	pfile = NULL;

}

// 指定位置讀寫
void function5()
{
	FILE* pfile;
	char str[100] = {};
	if ((pfile = fopen("text5.txt", "r")) != NULL)
	{
		printf("檔案打開成功!\n");
	}
	else
	{
		printf("檔案打開失敗!\n");
	}
	// 正常讀取
	putchar(fgetc(pfile));
	putchar('\n');
	/*
	C 庫函式 int fseek(FILE *stream, long int offset, int whence)
	設定流 stream 的檔案位置為給定的偏移 offset,
	引數 offset 意味著從給定的 whence 位置查找的位元組數,
	引數:
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	offset -- 這是相對 whence 的偏移量,以位元組為單位,
	whence -- 這是表示開始添加偏移 offset 的位置,它一般指定為下列常量之一:
	SEEK_SET 檔案的開頭
	SEEK_CUR 檔案指標的當前位置
	SEEK_END 檔案的末尾
	#define SEEK_CUR  1
	#define SEEK_END  2
	#define SEEK_SET  0
	回傳值:
	如果成功,則該函式回傳零,否則回傳非零值,
	*/
	fseek(pfile, 2, SEEK_END); //使檔案指標指向指定位置
	fgets(str, 6, pfile);
	/*
	C 庫函式 int ferror(FILE *stream) 測驗給定流 stream 的錯誤識別符號,
	引數:
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	回傳值:
	如果設定了與流關聯的錯誤識別符號,該函式回傳一個非零值,否則回傳一個零值,
	*/
	if (ferror(pfile))
	{
		printf("檔案讀取失敗!\n");
	}
	else
	{
		printf("檔案讀取成功!\n");
	}
	// 列印讀取的內容
	puts(str);
	/*
	描述
	C 庫函式 void clearerr(FILE *stream) 清除給定流 stream 的檔案結束和錯誤識別符號,
	引數
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	回傳值
	這不會失敗,且不會設定外部變數 errno,
	但是如果它檢測到它的引數不是一個有效的流,則回傳 -1,并設定 errno 為 EBADF,
	*/
	clearerr(pfile); //清除讀取/寫入/ferror函式報錯后出現錯誤的錯誤標志
	/*
	描述
	C 庫函式 void rewind(FILE *stream) 設定檔案位置為給定流 stream 的檔案的開頭,
	引數
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	回傳值
	該函式不回傳任何值,
	*/
	rewind(pfile);//強制使檔案指標指向檔案開頭
	/*
	描述
	C 庫函式 int feof(FILE *stream) 測驗給定流 stream 的檔案結束識別符號,
	引數
	stream -- 這是指向 FILE 物件的指標,該 FILE 物件標識了流,
	回傳值
	當設定了與流關聯的檔案結束識別符號時,該函式回傳一個非零值,否則回傳零,
	*/
	while (!feof(pfile)) //feof函式判斷是否讀到檔案末尾
	{
		putchar(fgetc(pfile));
	}
	putchar('\n');
	if (fclose(pfile) == EOF)
	{
		printf("檔案關閉失敗!\n");
	}
	else
	{
		printf("檔案關閉成功!\n");
	}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/255211.html

標籤:其他

上一篇:倪文迪陪你學藍橋杯2021寒假每日一題:1.31日(2019省賽A組第9題)

下一篇:常見排序演算法總結

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more