真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言文件監(jiān)控函數(shù) c語言鍵盤監(jiān)控

如何用C語言監(jiān)視一文件,(可以隔一定時間檢測該文件),當文件相比較上一時間有改動時,讀出改動處

、“網(wǎng)絡監(jiān)視器”的基本使用

目前創(chuàng)新互聯(lián)已為成百上千的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)絡空間、網(wǎng)站托管維護、企業(yè)網(wǎng)站設計、雙清網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

欲打開“網(wǎng)絡監(jiān)視器”,只需依次選擇“開始→程序→附件→系統(tǒng)工具→網(wǎng)絡監(jiān)視器”即可進入其主窗口。

對于“網(wǎng)絡監(jiān)視器”中的功能,既可以選擇菜單中的相應項目,也可以通過直接單擊工具欄上的相應按鈕來實現(xiàn)。在其主窗口工具欄上的按鈕,從左到右作用依次為:

1.選擇服務器:通過它可對其他計算機的“網(wǎng)絡監(jiān)視器”進行遠程管理。具體的使用方法請參見后文相關內(nèi)容。

2.斷開用戶連接:通過它可強行中斷列表中指定用戶對本機的連接。

3.關閉文件:通過它可強行關閉列表中指定用戶所打開的指定共享文件。

4.添加共享:通過它可根據(jù)提示直接添加本機的共享資源,并為它設置相應權(quán)限。

5.停止共享:通過它可停止列表中指定資源的共享。

6.顯示用戶:這相當于選“查看”菜單中的“按連接”項,它是“網(wǎng)絡監(jiān)視器”主窗口的默認狀態(tài),也是最常用的窗口。此處可以查看到已連接到本機的客戶機的用戶名、計算機名、打開了些什么共享資源、打開些什么文件以及連接的時間和空閑的時間等資料。當客戶機斷開連接之后它就會自動從此列表中消失。

7.顯示共享的文件夾:這相當于選“查看”菜單中的“按共享的文件夾”項。它可以查看本機已共享的資源及其共享名和權(quán)限;可添加共享,停止共享,修改共享等。

8、顯示文件:這相關于選“查看”菜單中的“按打開的文件”項。它可以查看已打開的本服務器文件;可關閉文件等。

三、“網(wǎng)絡監(jiān)視器”的遠程監(jiān)視

本文上面部分已經(jīng)講過“網(wǎng)絡監(jiān)視器”在本地計算機上的基本使用方法,但實際上在一定條件滿足的情況下,它也可以對局域網(wǎng)內(nèi)的其他計算機進行完全相同的遠程管理。請進行如下的操作:

1.啟用遠程管理

在遠程計算機上,先進入其“控制面板→密碼→遠程管理”窗口,再勾選中“啟用此服務器的遠程管理”,接著在相應位置輸入密碼后按“確定”按鈕保存退出。

2.使用遠程管理

在本地計算機上,先進入“網(wǎng)絡監(jiān)視器”的主窗口,再選“管理員”菜單中的“選擇服務器”項,在“請輸入要進行管理的服務器名”的提示窗口中的“名稱”處輸入遠程計算機的名字(比如為zhuyan),然后按“確定”按鈕繼續(xù);系統(tǒng)接著會提示“必須提供密碼才能連接”,則請在“密碼”后輸入“啟用遠程管理”一步中所設的密碼值,最后按“確定”按鈕即可得到新的“網(wǎng)絡監(jiān)視器”的窗口,里面當然是遠程計算機的共享內(nèi)容了,你所要做的,就是進行正常操作就可以啦!

注意:

1.如果在“使用遠程管理”操作中,當進行到輸入密碼一步勾選中了“請將密碼保存到密碼列表”項,則當你以后再連接到遠程計算機時就不用輸入密碼了。

2.如果要想修改共享文件夾名或其權(quán)限設置,則需要在“顯示共享的文件夾”窗口中,先在列表中選中該用戶,然后按鍵盤上的ALT+ENTER鍵(或者選“管理員”菜單中的“共享文件夾的屬性”項),再根據(jù)提示進行操作即可。

C語言中對fork,heap,stack,cpu time,stdout的監(jiān)控,急求

只是幫你調(diào)好的程序代碼,你想做什么沒搞明白,不懂,希望對你有幫助

看注釋,修改你的程序就好了

static int readStat(int pid, struct statStuff *s)

{

const char *format = "%d %d %ld ";

char buf[256];

FILE *proc;

sprintf(buf,"/proc/%d/stat",pid);

proc = fopen(buf,"r");

if (proc) {

if (3==fscanf(proc, format, s-pid, s-tpgid, s-cutime)) //ERR:42??%d %d %ld , 最后多一個逗號

{

fclose(proc);

return 1;

} else {

fprintf(stderr, "no data in file:%s\n" , buf );

fclose(proc);

return 0;

}

} else {

fprintf(stderr, "can't open %s\n",buf);

return 0;

}

}

static int readStatm(int pid, struct statmStuff *s)

{

const char *format = "%lu %lu";

char buf[256];

FILE *proc;

sprintf(buf,"/proc/%d/statm",pid);

proc = fopen(buf,"r");

if (proc) {

if (2==fscanf(proc, format, s-size, s-data) ) //ERR:7??? %lu %lu

{

fclose(proc);

return 1;

} else {

fprintf(stderr, "no data in file:%s\n" , buf );

fclose(proc);

return 0;

}

} else {

fprintf(stderr, "can't open %s\n",buf);

return 0;

}

}

int main()

{

int pid;

pid=fork();

if(pid==0) //ERR:==比較

{

execlp( "ls" , "ls" , "-l" , "/" ); //沒有exec函數(shù),不知道你的makefile干什么,這里舉一個ls命令

}

else

while(1){

struct statStuff stat;

struct statmStuff statm;

if (readStat(pid,stat)) //ERR:ppid?

{

printf("stat is\n");

printStat(stdout,stat);

catStat(stdout,pid,"stat"); //ERR:ppid?

//pkill掉大于1cpu秒,fork超過10次及stdout多于50行的程序,輸出給stderr

} else {

printf("didn't get stat\n");

}

if (readStatm(pid,statm)) //ERR:ppid?

{

printf("statm is\n");

printStatm(stdout,statm);

catStat(stdout,pid,"statm"); //ERR:ppid?

//處理heap或stack大于4096kb的程序,輸出給stderr

} else {

printf("didn't get statm\n");

}

getchar();

}

return 0;

}

監(jiān)控磁盤大小c語言

這篇文章主要介紹了C/C++ 監(jiān)控磁盤與目錄操作的示例,幫助大家更好的理解和學習C/C++編程,感興趣的朋友可以了解下

遍歷磁盤容量:

#include stdio.h

#include Windows.h

void GetDrivesType(const char* lpRootPathName)

{

UINT uDriverType = GetDriveType(lpRootPathName);

switch (uDriverType)

{

case DRIVE_UNKNOWN:puts("未知磁盤"); break;

case DRIVE_NO_ROOT_DIR: puts("路徑無效"); break;

case DRIVE_REMOVABLE: puts("可移動磁盤"); break;

case DRIVE_FIXED: puts("固定磁盤"); break;

case DRIVE_REMOTE: puts("網(wǎng)絡磁盤"); break;

case DRIVE_CDROM: puts("光驅(qū)"); break;

case DRIVE_RAMDISK: puts("內(nèi)存映射盤"); break;

default: break;

}

}

void GetDrivesFreeSpace(const char* lpRootPathName)

{

unsigned long long available, total, free;

if (GetDiskFreeSpaceEx(lpRootPathName, (ULARGE_INTEGER*)available,

(ULARGE_INTEGER*)total, (ULARGE_INTEGER*)free))

{

printf("磁盤: %s | 總計: %lld MB 已用: %lld MB 剩余: %lld MB \n",

lpRootPathName, total 20, available 20, free 20);

}

}

int main(int argc,char *argv[])

{

DWORD dwSize = MAX_PATH;

char szLogicalDrives[MAX_PATH] = {0};

// 獲取邏輯驅(qū)動器號字符串

DWORD dwResult = GetLogicalDriveStringsA(dwSize, szLogicalDrives);

if (dwResult 0 dwResult = MAX_PATH) {

char* szSingleDrive = szLogicalDrives; // 從緩沖區(qū)起始地址開始

while (*szSingleDrive) {

//printf("Drive: %s\n", szSingleDrive); // 輸出單個驅(qū)動器的驅(qū)動器號

// GetDrivesType(szSingleDrive);

GetDrivesFreeSpace(szSingleDrive);

szSingleDrive += strlen(szSingleDrive) + 1; // 獲取下一個驅(qū)動器地址

}

}

system("pause");

return 0;

}

遍歷文件特定路徑:

循環(huán)遍歷文件路徑,并將文件后綴為.exe的路徑篩選出來.

#include stdio.h

#include windows.h

#include tlhelp32.h

void SearchFile(char *pszDirectory)

{

// 搜索指定類型文件

char *pszFileName = NULL;

char *pTempSrc = NULL;

WIN32_FIND_DATA FileData = { 0 };

// 申請動態(tài)內(nèi)存

pszFileName = new char[2048];

pTempSrc = new char[2048];

// 構(gòu)造搜索文件類型字符串 *.* 表示搜索所有文件類型

wsprintf(pszFileName, "%s\\*.*", pszDirectory);

HANDLE hFile = ::FindFirstFile(pszFileName, FileData);

if (INVALID_HANDLE_VALUE != hFile)

{

do

{

// 過濾掉當前目錄"." 和上一層目錄".."

if ('.' == FileData.cFileName[0])

continue;

// 拼接文件路徑

wsprintf(pTempSrc, "%s\\%s", pszDirectory, FileData.cFileName);

// 判斷是否是目錄還是文件

if (FileData.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY)

SearchFile(pTempSrc); // 如果是目錄則繼續(xù)遞歸

else

{

char drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];

_splitpath(pTempSrc, drive, dir, fname, ext);

// 如果是文件并且后綴為.exe則輸出具體路徑

if (strcmp(ext, ".exe") == 0)

printf("%s \n", pTempSrc);

}

} while (::FindNextFile(hFile, FileData));

}

FindClose(hFile);

delete[]pTempSrc;

delete[]pszFileName;

}

int main(int argc, char * argv[])

{

SearchFile("c:\\MinGW7");

system("pause");

return 0;

}

監(jiān)控文件目錄變化:

#include stdio.h

#include windows.h

#include tlhelp32.h

UINT MonitorFileThreadProc(LPVOID lpVoid)

{

char *pszDirectory = (char *)lpVoid;

// 打開目錄, 獲取文件句柄

HANDLE hDirectory = CreateFile(pszDirectory, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE,

NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);

if (INVALID_HANDLE_VALUE == hDirectory)

return 1;

char szFileName[MAX_PATH] = { 0 };

BOOL bRet = FALSE;

DWORD dwRet = 0;

DWORD dwBufferSize = 2048;

// 申請一個足夠大的緩沖區(qū)

BYTE *pBuf = new BYTE[dwBufferSize];

if (NULL == pBuf)

return 2;

FILE_NOTIFY_INFORMATION *pFileNotifyInfo = (FILE_NOTIFY_INFORMATION *)pBuf;

// 開始循環(huán)設置監(jiān)控

do

{

RtlZeroMemory(pFileNotifyInfo, dwBufferSize);

// 設置監(jiān)控目錄

bRet = ReadDirectoryChangesW(hDirectory, pFileNotifyInfo, dwBufferSize, TRUE,

FILE_NOTIFY_CHANGE_FILE_NAME | // 修改文件名

FILE_NOTIFY_CHANGE_ATTRIBUTES | // 修改文件屬性

FILE_NOTIFY_CHANGE_LAST_WRITE, // 最后一次寫入

dwRet, NULL, NULL);

if (FALSE == bRet)

break;

// 將寬字符轉(zhuǎn)換成窄字符,寬字節(jié)字符串轉(zhuǎn)多字節(jié)字符串

WideCharToMultiByte(CP_ACP, 0, (wchar_t *)(pFileNotifyInfo-FileName),

(pFileNotifyInfo-FileNameLength / 2),szFileName,MAX_PATH,NULL,NULL);

// 將路徑與文件連接成完整文件路徑

char FullFilePath[1024] = { 0 };

strncpy(FullFilePath, pszDirectory, strlen(pszDirectory));

strcat(FullFilePath, szFileName);

// 判斷操作類型并顯示

switch (pFileNotifyInfo-Action)

{

case FILE_ACTION_ADDED:

printf("文件被 [創(chuàng)建]: %s \n", FullFilePath); break;

case FILE_ACTION_REMOVED:

printf("文件被 [刪除]: %s \n", FullFilePath); break;

case FILE_ACTION_MODIFIED:

printf("文件被 [修改]: %s \n", FullFilePath); break;

case FILE_ACTION_RENAMED_OLD_NAME:

printf("文件被 [重命名]: %s \n", FullFilePath); break;

}

} while (bRet);

CloseHandle(hDirectory);

delete[] pBuf;

pBuf = NULL;

return 0;

}

int main(int argc, char * argv[])

{

char *pszDirectory = "C:\\";

// 創(chuàng)建線程開始監(jiān)控

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MonitorFileThreadProc, pszDirectory, 0, NULL);

while (1)

{

Sleep(10000);

}

system("pause");

return 0;

}

監(jiān)控目錄文件變化:

可以將其改為一個簡單的文件防篡改程序,也可以用來監(jiān)控病毒的行為.

#include stdio.h

#include Windows.h

#include tlhelp32.h

DWORD WINAPI MonitorFileThreadProc(LPVOID lParam)

{

char *pszDirectory = (char *)lParam;

BOOL bRet = FALSE;

BYTE Buffer[1024] = { 0 };

FILE_NOTIFY_INFORMATION *pBuffer = (FILE_NOTIFY_INFORMATION *)Buffer;

DWORD dwByteReturn = 0;

HANDLE hFile = CreateFile(pszDirectory, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,

NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);

if (INVALID_HANDLE_VALUE == hFile)

return 1;

while (TRUE)

{

ZeroMemory(Buffer, sizeof(Buffer));

// 設置監(jiān)控目錄回調(diào)函數(shù)

bRet = ReadDirectoryChangesW(hFile,Buffer,sizeof(Buffer),TRUE,

FILE_NOTIFY_CHANGE_FILE_NAME | // 修改文件名

FILE_NOTIFY_CHANGE_ATTRIBUTES | // 修改文件屬性

FILE_NOTIFY_CHANGE_LAST_WRITE, // 最后一次寫入

dwByteReturn, NULL, NULL);

if (TRUE == bRet)

{

char szFileName[MAX_PATH] = { 0 };

// 將寬字符轉(zhuǎn)換成窄字符,寬字節(jié)字符串轉(zhuǎn)多字節(jié)字符串

WideCharToMultiByte(CP_ACP,0,pBuffer-FileName,(pBuffer-FileNameLength / 2),

szFileName,MAX_PATH,NULL,NULL);

// 將路徑與文件連接成完整文件路徑

char FullFilePath[1024] = { 0 };

strncpy(FullFilePath, pszDirectory, strlen(pszDirectory));

strcat(FullFilePath, szFileName);

switch (pBuffer-Action)

{

case FILE_ACTION_ADDED:

{

printf("添加: %s \n", FullFilePath); break;

}

case FILE_ACTION_REMOVED:

{

printf("刪除: %s \n", FullFilePath); break;

}

case FILE_ACTION_MODIFIED:

{

printf("修改: %s \n", FullFilePath); break;

}

case FILE_ACTION_RENAMED_OLD_NAME:

{

printf("重命名: %s", szFileName);

if (0 != pBuffer-NextEntryOffset)

{

FILE_NOTIFY_INFORMATION *tmpBuffer = (FILE_NOTIFY_INFORMATION *)

((DWORD)pBuffer + pBuffer-NextEntryOffset);

switch (tmpBuffer-Action)

{

case FILE_ACTION_RENAMED_NEW_NAME:

{

ZeroMemory(szFileName, MAX_PATH);

WideCharToMultiByte(CP_ACP,0,tmpBuffer-FileName,

(tmpBuffer-FileNameLength / 2),

szFileName,MAX_PATH,NULL,NULL);

printf(" - %s \n", szFileName);

break;

}

}

}

break;

}

case FILE_ACTION_RENAMED_NEW_NAME:

{

printf("重命名(new): %s \n", FullFilePath); break;

}

}

}

}

CloseHandle(hFile);

return 0;

}

int main(int argc, char * argv[])

{

char *pszDirectory = "C:\\";

HANDLE hThread = CreateThread(NULL, 0, MonitorFileThreadProc, pszDirectory, 0, NULL);

WaitForSingleObject(hThread, INFINITE);

CloseHandle(hThread);

return 0;

}

以上就是C/C++ 監(jiān)控磁盤與目錄操作的示例的詳細內(nèi)容


文章標題:C語言文件監(jiān)控函數(shù) c語言鍵盤監(jiān)控
URL地址:http://weahome.cn/article/dospphh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部