哪个组件用于创建模式和非模式javascript对话框组件

初学者,可能问题中有许多不恰当的说法,还请大侠们多多包涵
基本弄懂如何建立一个com组件,由自定义的接口派生,接口很简单,只有一个函数。现在是想客户调用这个接口函数后显示一个对话框,可以做一些事情。
我是照书一步一步做的,先由MFC&AppWizard(Dll)建立一个Dll工程,用默认设置。然后加入一个基于CCmdTarget的派生类做为com组件类,定义一个接口,然后在组件类中由宏构建接口的派生类实现com的接口。接口很简单,如下
class&IMyInterface:&public&IUnknown
virtual&void&__stdcall&test()&=&0;
接口实现函数是这么写的
STDMETHODIMP_(void)&CMyComObj::XMyComObj::test()
AfxMessageBox(&My&Test!&);
然后生成Dll,注册。在客户程序中调用,一切正常,可以弹出消息框。然后我想加入一个自定义对话框,我这么做的:
首先加入一个对话框资源,由classwizard生成关联类,比如是CDlg1,然后在组件类中加入一个成员变量CDlg1*&m_pDlg,最后在接口函数实现中显示出来:
STDMETHODIMP_(void)&CMyComObj::XMyComObj::test()
METHOD_PROLOGUE_EX_(CMyComObj,&MyComObj)&&&&&
pThis-&m_pDlg=new&CDlg1();
pThis-&m_pDlg-&Create(CDlg1::IDD,&NULL);
&&&&&&&&&pThis-&m_pDlg-&ShowWindow(SW_SHOW);
运行时出现断言错误,调试跟踪到pThis-&m_pDlg-&Create(CDlg1::IDD,&NULL);这句时出错,断言错误是出现在MFC库文件dlgcore.cpp中,出现在
if&(!_AfxCheckDialogTemplate(lpszTemplateName,&FALSE))
ASSERT(FALSE);&&&&&&&&&&//&invalid&dialog&template&name
PostNcDestroy();&&&&&&&&//&cleanup&if&Create&fails&too&soon
return&FALSE;
好像是_AfxCheckDialogTemplate()返回false导致断言错误。可是显示非模对话框这三句程序写在一般的应用程序中如一个基于对话框应用程序的按钮响应函数中是正常的,为什么到这里会出错。我查了一下MSDN,却找不到_AfxCheckDialogTemplate这个库函数的信息,所以也不知道为什么错了。
请教各位大侠,相在接口函数中显示一个对话框应该如何做呢?或者我写的语句哪错了呢,谢谢!
回复讨论(解决方案)
COM中建议不要使用MFC,&MFC的初始化比较复杂,&
用ATL窗体很容易创建对话框
/en-us/library/7a51wcfx(VS.80).aspx
估计是要在DLL里加上
AFX_MANAGEED_RESOURCE
有可能记错初学者提问,怎么在基于MFC的COM组件中显示一个非模态对话框_如何实现抓屏功能VCMFC_小弟我使用过的Linux命令之du - 查看文件的磁盘空间占用情况__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
初学者提问,怎么在基于MFC的COM组件中显示一个非模态对话框
如何实现抓屏功能VCMFC
小弟我使用过的Linux命令之du - 查看文件的磁盘空间占用情况
初学者提问,怎么在基于MFC的COM组件中显示一个非模态对话框
菜鸟提问,如何在基于MFC的COM组件中显示一个非模态对话框本来发在COM的,那里人太少了,所以借这里的人气再发一次,加到一百分,大家帮帮忙,谢谢。
----------------------
初学者,可能问题中有许多不恰当的说法,还请大侠们多多包涵
基本弄懂如何建立一个com组件,由自定义的接口派生,接口很简单,只有一个函数。现在是想客户调用这个接口函数后显示一个对话框,可以做一些事情。
我是照书一步一步做的,先由MFC
AppWizard(Dll)建立一个Dll工程,用默认设置。然后加入一个基于CCmdTarget的派生类做为com组件类,定义一个接口,然后在组件类中由宏构建接口的派生类实现com的接口。接口很简单,如下
IMyInterface:
接口实现函数是这么写的
STDMETHODIMP_(void)
CMyComObj::XMyComObj::test()
AfxMessageBox( "My
然后生成Dll,注册。在客户程序中调用,一切正常,可以弹出消息框。然后我想加入一个自定义对话框,我这么做的:
首先加入一个对话框资源,由classwizard生成关联类,比如是CDlg1,然后在组件类中加入一个成员变量CDlg1*
m_pDlg,最后在接口函数实现中显示出来:
STDMETHODIMP_(void)
CMyComObj::XMyComObj::test()
METHOD_PROLOGUE_EX_(CMyComObj,
pThis-& m_pDlg=new
pThis-& m_pDlg-& Create(CDlg1::IDD,
pThis-& m_pDlg-& ShowWindow(SW_SHOW);
运行时出现断言错误,调试跟踪到pThis-& m_pDlg-& Create(CDlg1::IDD,
NULL);这句时出错,断言错误是出现在MFC库文件dlgcore.cpp中,出现在
(!_AfxCheckDialogTemplate(lpszTemplateName,
ASSERT(FALSE);
PostNcDestroy();
好像是_AfxCheckDialogTemplate()返回false导致断言错误。可是显示非模对话框这三句程序写在一般的应用程序中如一个基于对话框应用程序的按钮响应函数中是正常的,为什么到这里会出错。我查了一下MSDN,却找不到_AfxCheckDialogTemplate这个库函数的信息,所以也不知道为什么错了。
请教各位大侠,相在接口函数中显示一个对话框应该如何做呢?或者我写的语句哪错了呢,谢谢!------解决方案--------------------可能是你的模板资源有问题,你要保证这个对话框资源存在你的工程中,你可以新建一个对话框资源再看看
------解决方案--------------------在资源中找不到这个对话框模板
------解决方案--------------------com运行的容器所在的moudle没有包含这个对话框的资源吧?
直接传一个对话框资源来生成试试看.
------解决方案--------------------在你的com里创建对话框前加一句
AfxSetResourceHandle(this-& m_hInstance);
试试 ------解决方案--------------------com里面或者线程里面弹对话框需要特殊处理的。
------解决方案--------------------很简单吧,你的dll要支持mfc,然后想在mfc的exe程序中一样添加一个dialog,然后你就可以使用这个对话框了,再实例化这个对象的时候加上一句
AfxEnableControlContainer();
如何实现抓屏功能VCMFC
怎么实现抓屏功能VC\MFC我在界面上添加了一个“抓屏”按钮,想通过点击按钮就能实现抓屏功能,就是当前整个屏幕,然后直接弹出保存对话框;请各位大侠给点详细全面的解说和代码,小弟刚入手MFC,实在是能力不足,在此先谢过。------解决方案--------------------
VC 抓屏的各种方法目录:1 导言2 用GID函数抓屏3
用DirectX方式抓屏4 用Windows Media API抓屏1 导言有时候我们需要编程抓取整个屏幕上的内容,下面我将介绍抓屏是如何实现的。典型地,我们可以用GID和DirectX来完成,另外一个选择是 Windows Media API,在这篇文章我会逐一加以分析。在每一种方法里,一旦我们把屏幕的内容保存到了程序定义的内存块或bitmap文件里,我们就可以进一步利用它们来生成动画和电影,这个过程你可以参考“从HBitmap创建电影”一文中,以获得更多的帮助。2 用GDI函数抓屏如果我们不太在意抓屏的效率,并且我们想要的只是一个屏幕快照的话,可以考虑使用GDI方式。这种抓屏机制是以“桌面也是一个窗口,桌面也有一个窗口句柄(HWND)”这个简单的常识为基础的,如果我们得到了桌面的设备上下文(DC),就可以利用blit(复制)它的内容到我们创建的DC中。我们可以用 GetDeskWindow()得到桌面的窗口句柄,从句柄得到DC也是很容易的。具体的实现步骤为:1.
通过GetDesktopWindow()函数得到桌面的窗口句柄2.
用GetDC()取得桌面窗口的DC3.
创建和屏幕DC兼容的位图和DC(CreateCompatibleBitmap ()和CreateCompatibleDC()),并把这个位图选进该DC(SelectObject())4.
当你准备好抓屏时,就复制桌面窗口DC的内容到兼容DC,你就完成的抓屏过程,兼容位图中就是抓屏时刻的屏幕内容5.
完成后别忘了释放你创建的对象,内存是宝贵的(对别的程序来说)示例代码:void CaptureScreen(){
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
HWND hDesktopWnd = GetDesktopWindow();
HDC hDesktopDC = GetDC(hDesktopWnd);
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC,
nScreenWidth, nScreenHeight);
SelectObject(hCaptureDC,hCaptureBitmap);
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);
SaveCapturedBitmap(hCaptureBitmap); //Place holder - Put your code
//here to save the captured image to disk
ReleaseDC(hDesktopWnd,hDesktopDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);}上面代码段中,GetSystemMetrics()返回屏幕的宽度(SM_CXSCREEN)和高度(SM_CYSCREEN)。关于如何保存抓到的位图到文件和如何置到剪贴板,请参看附带的源代码,很简单的。示例代码每隔一段时间就通过上述技术抓屏,并把图像序列保存到动画。3 DirectX方式用DreictX进行抓屏也是很简单的,DirectX提供了很优雅的实现。每个DirectX程序都包含一个被我们称作缓冲的内存区域,其中保存了和该程序有关的显存内容,这在程序中被称作后台缓冲(Back Buffer),有些程序有不止一个的后台缓冲。还有一个缓冲,在默认情况下每个程序都可以访问-前台缓冲。前台缓冲保存了和桌面相关的显存内容,实质上就是屏幕图像。我们的程序通过访问前台缓冲就可以捕捉到当前屏幕的内容。由DirectX的底层优化机制做保证,我们的抓屏效率是很高的,至少比GDI方式高。在DirectX程序中访问前台缓冲是很简单的,IDirect3DDevice8接口提供了GetFrontBuffer()方法,它接收一个 IDirect3DSurface8对象指针做参数,并复制前台缓冲的内容到该Surface。IDirect3DSurfce8对象可以用 IDirect3DDevice8::CreateImageSurface()得到。一旦屏幕内容被保存到了这个surface,我们就可以用 D3DXSaveSurfaceToFile()方法直接把内容保存到磁盘bmp文件。示例代码如下:extern IDirect3DDevice8* g_pd3dDVoid CaptureScreen(){
IDirect3DSurface8 * pS
g_pd3dDeviceàCreateImageSurface(ScreenWidth,ScreenHeight,
D3DFMT_A8R8G8B8,&pSurface);
g_pd3dDevice-&GetFrontBuffer(pSurface);
D3DXSaveSurfaceToFile("Desktop.bmp",D3DXIFF_BMP,pSurface,
NULL,NULL);pSurface-&Release();}上面,g_pd3dDevice 是一个初始化好的IDirect3DDevice对象,这个例子直接把捕捉到的图像保存到文件。然而,有时候我们想访问直接这个图像中的各个位,我们可以使用IDirect3DSurface8::LockRect(),它给我们一个执行surface内存的指针,也就是捕捉到的图像的数据。我们复制这些数据到程序定义的内存中就可以操作它了。看下面的代码:extern void* pBextern IDirect3DDevice8* g_pd3dDIDirect3DSurface8 * pSg_pd3dDeviceàCreateImageSurface(ScreenWidth,ScreenHeight,
D3DFMT_A8R8G8B8,&pSurface);g_pd3dDevice-&GetFrontBuffer(pSurface);D3DLOCKED_RECT lockedRpSurfaceàLockRect(&lockedRect,NULL,
D3DLOCK_NO_DIRTY_UPDATE|D3DLOCK_NOSYSLOCK|
D3DLOCK_READONLY)));for( int i=0 ; i & ScreenH i++){
memcpy( (BYTE*) pBits + i * ScreenWidth * BITSPERPIXEL / 8 ,
(BYTE*) lockedRect.pBits + i* lockedRect.Pitch ,
ScreenWidth * BITSPERPIXEL / 8);}g_pSurface-&UnlockRect();pSurface-&Release();上面的pBits是一个void*,请保证为先为它分配组足够的内存空间。BITSPERPIXEL一般用32位色即可,它也取决于你的显示器当前配置。一个需要注意的是,surface的宽度和被捕捉的屏幕宽度不一样。由于内存对齐的原因(按WORD对齐的内存通常在访问时效率较高),surface在每行结尾处可能会有多余的bits以使它对齐到word边界上。lockedRect.Pitch给我们提供了两个连续行的开端之间的字节数。也就是说我们在读取一行时要向后移动指针Pitch字节而不是Width字节。你可以用下面的代码反序复制surface:
for( int i=0 ; i & ScreenH i++){
memcpy((BYTE*) pBits +( ScreenHeight - i - 1) *
ScreenWidth * BITSPERPIXEL/8 ,
(BYTE*) lockedRect.pBits + i* lockedRect.Pitch ,
ScreenWidth* BITSPERPIXEL/8);}这对于从top-down位图到bottom-up位图很有用。我们还可以使用IDirect3DSurface9的 GetDC()方法取得DirectX surface的GDI兼容DC,然后复制它的内容到我们的兼容DC。如果你用的是DirectX9,试试吧。最后,需要注意的一点,文档提到:FrontBuffer是一个比较慢的操作,设计就是如此,所以在效率很关键的程序中应避免使用。已经警告你了!本文附带的源代码用这种技术定时捕捉屏幕,并保存为动画。4 用Windows Media API抓屏Windows Media 9.0 支持用Windows Media Encoder 9 API来抓屏。它有一个编码器叫Windows Media Video 9 Screen codec,特别为抓屏优化过。Windows Media Encoder API提供了一个IWMEncoder2接口可以用来高效地捕捉屏幕图像。用这种技术进行抓屏也很简单,首先我们用CoCreateInstance()创建一个IWMEncoder2对象:IWMEncoder2* g_pEncoder=NULL;CoCreateInstance(CLSID_WMEncoder,NULL,CLSCTX_INPROC_SERVER,
IID_IWMEncoder2,(void**)&g_pEncoder);这个Encoder对象包含了捕捉屏幕的所需的全部操作,然而为了正确地工作,编码器对象的行为取决于被称作profile的设置。一个profile只是一个包含了所有控制编码操作设置的文件,我们可以根据被捕捉的数据的特性在运行时创建包含自定义设置的profile。为了在你的抓屏程序中使用 profile,我们基于Windows Media Video 9 Screen codec来创建自定义的profile。自定义的profile对象从IWMEncProfile2开始就被支持了。我们可以用 CoCreateInstance来创建自定义profileIWMEncProfile2* g_pProfile=NULL;CoCreateInstance(CLSID_WMEncProfile2,NULL,CLSCTX_INPROC_SERVER,
IID_IWMEncProfile2,(void**)&g_pProfile);我需要在profile里指定编码器的听众(audience)。每个profile可以包含多个听众配置,它们是IWMEncAudienceObj接口对象。这里我们为profile使用一个听众。我们可以通过IWMEncProfile::AddAudience()为我们的profile创建听众,这个函数返回一个IWMEncAudienceObj指针,可以用来配置视频编码器 (IWMEncAudienceObj::put_VideoCodec()),视频帧对象 (IWMEncAudienceObj::put_VideoHeight() 和IWMEncAudienceObj::put_VideoWidth())我们用下面的代码来配置视频编码器:extern IWMEncAudienceObj* pA#define VIDEOCODEC MAKEFOURCC('M','S','S','2')
//MSS2 is the fourcc for the screen codeclong lCodecIndex=-1;g_pProfile-&GetCodecIndexFromFourCC(WMENC_VIDEO,VIDEOCODEC,
&lCodecIndex); //Get the Index of the CodecpAudience-&put_VideoCodec(0,lCodecIndex);fourcc是针对每个编码器的唯一的标识,Windows Media Video 9 Screen codec的fourcc为MSS2。IWMEncAudienceObj::put_VideoCodec()接受profile索引来组织一个 profile,索引可以用IWMEncProfile::GetCodecIndexFromFourCC()取得。一旦我们配置完毕一个profile对象,我们就可以用IWMEncSourceGroup :: put_Profile()选择这个profile到我们的编码器。一个源组(SourceGruop)是一组视频流来源或音频流来源,或html来源。每个编码器可以使用许多源组,并从中取得输入数据。由于我们的程序仅仅使用视频流中是视频来源。这个视频来源需要用 IWMEncVideoSource2::SetInput(BSTR) Screen Device来配置为输入来源:extern IWMEncVideoSource2* pSrcVpSrcVid-&SetInput(CComBSTR("ScreenCap://ScreenCapture1");目的输出可以用IWMEncFile::put_LocalFileName()配置为保存到视频文件(wmv文件)。IWMEncFile对象可以用IWMEncoder::get_File()得到:IWMEncFile* pOutFile=NULL;g_pEncoder-&get_File(&pOutFile);pOutFile-&put_LocalFileName(CComBSTR(szOutputFileName);现在,一旦编码器对象的一切所需配置都完成后,我们就可以用IWMEncoder::Start()开始抓屏。IWMEncoder::Stop() 和 IWMEncoder::Pause可以用来停止和暂停捕捉。这些适用于全屏捕捉,我们也可以通过调整输入视频来源流的属性来选择一个区域进行捕捉。我们可以用IWmEnVideoSource2的IPropertyBag 接口来实现:#define WMSCRNCAP_WINDOWLEFT CComBSTR("Left")#define WMSCRNCAP_WINDOWTOP CComBSTR("Top")#define WMSCRNCAP_WINDOWRIGHT CComBSTR("Right")#define WMSCRNCAP_WINDOWBOTTOM CComBSTR("Bottom")#define WMSCRNCAP_FLASHRECT CComBSTR("FlashRect")#define WMSCRNCAP_ENTIRESCREEN CComBSTR("Screen")#define WMSCRNCAP_WINDOWTITLE CComBSTR("WindowTitle")extern IWMEncVideoSource2* pSrcVint nLeft, nRight, nTop, nBpSrcVid-&QueryInterface(IID_IPropertyBag,(void**)&pPropertyBag);CComVariant varValue =pPropertyBag-&Write(WMSCRNCAP_ENTIRESCREEN,&varValue);varValue = nLpPropertyBag-&Write( WMSCRNCAP_WINDOWLEFT, &varValue );varValue = nRpPropertyBag-&Write( WMSCRNCAP_WINDOWRIGHT, &varValue );varValue = nTpPropertyBag-&Write( WMSCRNCAP_WINDOWTOP, &varValue );varValue = nBpPropertyBag-&Write( WMSCRNCAP_WINDOWBOTTOM, &varValue );
本文附带的源码实现此中技术的抓屏。除去生成的动画质量很好外,一个有意思的地方是鼠标指针也被抓到了(GDI和DirectX默认是不抓取鼠标指针的)。注意,为了适用WindowMedia9.0 API,你的电脑必须安装Windows Media9.0 SDK,你可以用下面地址下载:/library/default.asp?url=/downloads/list/winmedia.asp最终用户必须安装Windows Media Encoder 9 系列才能运行你的程序。在发布基于Windows Media Encoder SDK的程序时,Windows Media Encoder软件也必须附带上去,要么在你的软件安装时自动安装Windows Media Encoder要么让用户自己下载安装。Windows Encoder 9.0可以从下面地址下载:/windows/windowsmedia/9series/encoder/default.aspx结论上面讨论的各种方法都是基于一个目标-抓取屏幕的内容。然而适用不同的技术,得到的结果也不一样。如果我们需要的只是偶尔的抓屏,GDI方式是个好的选择,因为它简单。然而如果你想得到更专业的结果,可以使用Windows Media。一个可能没有意义的要点是,这些技术捕捉到的内容的质量很大程度上决于你的系统设置,比如进制硬件加速会大大提高抓屏的质量和程序的运行效率。------解决方案--------------------
1楼的东西好全啊,连DirectX的方法都讲了不过保存BMP没贴。我来上保存代码C/C++ code
BOOL CxxDlg::SaveBmp(HBITMAP bmp,char* path)
//把位图的信息保存到
GetObject(bmp,sizeof(BITMAP),&bmpinfo);
DWORD dwBmBitsSize = ((bmpinfo.bmWidth * 32+31)/32) * 4 * bmpinfo.bmH
//位图文件头 14字节
BITMAPFILEHEADER
= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwBmBitsS
bf.bfReserved1 = 0;
bf.bfReserved2 = 0;
bf.bfOffBits
= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
//位图信息头
BITMAPINFOHEADER
= sizeof(BITMAPINFOHEADER);
bi.biWidth
= bmpinfo.bmW
bi.biHeight
= bmpinfo.bmH
bi.biPlanes
bi.biBitCount
bi.biCompression
bi.biSizeImage
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed
bi.biClrImportant
//位图数据;
char* context = new char[dwBmBitsSize];
= ::GetDC(NULL);
GetDIBits(dc, bmp, 0, bi.biHeight, context, (BITMAPINFO*)&bi, DIB_RGB_COLORS);
FILE* f = fopen(path,"wb");
fwrite((char*)&bf,sizeof(BITMAPFILEHEADER),1,f);
fwrite((char*)&bi,sizeof(BITMAPINFOHEADER),1,f);
fwrite(context,dwBmBitsSize,1,f);
fclose(f);
::ReleaseDC(m_hWnd,dc);
------解决方案--------------------
完整的把屏幕保存成BMP的程序#include &windowsx.h& UINT nC nCount = 0;{ CDC dc.CreateDC("DISPLAY",NULL,NULL,NULL); CB int Width=GetSystemMetrics(SM_CXSCREEN); int Height=GetSystemMetrics(SM_CYSCREEN); bm.CreateCompatibleBitmap(&dc,Width,Height); CDC tdc.CreateCompatibleDC(&dc); CBitmap*pOld=tdc.SelectObject(&bm); tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY); tdc.SelectObject(pOld); BITMAP bm.GetBitmap(&btm); DWORD size=btm.bmWidthBytes*btm.bmH LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size); BITMAPINFOHEADER bih.biBitCount=btm.bmBitsP bih.biClrImportant=0; bih.biClrUsed=0; bih.biCompression=0; bih.biHeight=btm.bmH bih.biPlanes=1; bih.biSize=sizeof(BITMAPINFOHEADER); bih.biSizeImage= bih.biWidth=btm.bmW bih.biXPelsPerMeter=0; bih.biYPelsPerMeter=0; GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS); static int filecount=0; CS name.Format("pict%04d.bmp",filecount++); BITMAPFILEHEADER bfh.bfReserved1=bfh.bfReserved2=0; bfh.bfType=((WORD)('M'&& 8)|'B'); bfh.bfSize=54+ bfh.bfOffBits=54; CF if(bf.Open(name,CFile::modeCreate|CFile::modeWrite)) {
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData,size);
bf.Close();
nCount++; } GlobalFreePtr(lpData);
------解决方案--------------------
还可以用CImage类的Save方法完成。
小弟我使用过的Linux命令之du - 查看文件的磁盘空间占用情况
我使用过的Linux命令之du - 查看文件的磁盘空间占用情况我使用过的Linux命令之du - 查看文件的磁盘空间占用情况
本文链接:/blog/786427
(转载请注明出处)
du命令是用来查看磁盘空间占用情况的,在Linux系统维护时常会用到,并且通常与df命令搭配使用。首先使用df看一下各个磁盘分区的占用情况,如果某个分区的占用超过一定百分比(比如80%),就认为该分区应该清理一下了。如果不太确定从哪里下手清理,就可以使用du来统计一下各个目录的磁盘占用情况,找到磁盘占用大的目录。一般情况下,程序日志占用的空间会比较多,Web上传产生的临时文件,导出数据时生成的数据文件,还有就是数据库也会随着时间而不断增长。
-s 显示总数量。
-h 显示的数量更好看些,比如用K/M/G表示大小。
--max-depth=N 统计的目录深度。当N=0时等同于-s,所以和--s参数不能同时出现。
-b 显示为字节数。
-k 显示为K字节数。
-m 显示为兆字节数。
示例一 查看/var的磁盘使用情况
[root@jfht ~]# df
可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
/dev/cciss/c0d0p1
0% /dev/shm
[root@jfht ~]# df /var
可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
[root@jfht ~]# du /var
/var/games
/var/local
/var/spool/at/spool
/var/spool/at
/var/spool/cron
/var/spool/lpd
/var/spool/clientmqueue
/var/spool/repackage
/var/spool/vbox
/var/spool/mqueue
/var/spool/cups/tmp
/var/spool/cups
/var/spool/mail
/var/spool/anacron
/var/spool
/var/yp/binding
/var/db/nscd
/var/empty/sshd/etc
/var/empty/sshd
/var/empty
/var/ftp/pub
/var/log/sa
/var/log/pm
/var/log/conman
/var/log/prelink
/var/log/audit
/var/log/gdm
/var/log/vbox
/var/log/ppp
/var/log/conman.old
/var/log/samba
/var/log/setroubleshoot
/var/log/cups
/var/log/mail
/var/lock/lvm
/var/lock/dmraid
/var/lock/subsys
/var/crash
/var/run/netreport
/var/run/sudo
/var/run/wpa_supplicant
/var/run/pm
/var/run/mdmpd
/var/run/winbindd
/var/run/mdadm
/var/run/nscd
/var/run/ppp
/var/run/dbus
/var/run/setrans
/var/run/avahi-daemon
/var/run/screen/S-root
/var/run/screen
/var/run/setroubleshoot
/var/run/cups/certs
/var/run/cups
/var/run/NetworkManager
/var/run/saslauthd
/var/run/console
/var/preserve
/var/cache/logwatch
/var/cache/yum
/var/cache/coolkey
/var/cache/foomatic
/var/cache/alchemist
/var/cache/fontconfig
/var/cache/man/cat6
/var/cache/man/cat4
/var/cache/man/X11R6/cat6
/var/cache/man/X11R6/cat4
/var/cache/man/X11R6/cat3
/var/cache/man/X11R6/catn
/var/cache/man/X11R6/cat1
/var/cache/man/X11R6/cat5
/var/cache/man/X11R6/cat2
/var/cache/man/X11R6/cat8
/var/cache/man/X11R6/cat9
/var/cache/man/X11R6/cat7
/var/cache/man/X11R6
/var/cache/man/local/cat6
/var/cache/man/local/cat4
/var/cache/man/local/cat3
/var/cache/man/local/catn
/var/cache/man/local/cat1
/var/cache/man/local/cat5
/var/cache/man/local/cat2
/var/cache/man/local/cat8
/var/cache/man/local/cat9
/var/cache/man/local/cat7
/var/cache/man/local
/var/cache/man/cat3
/var/cache/man/catn
/var/cache/man/cat1
/var/cache/man/cat5
/var/cache/man/cat2
/var/cache/man/cat8
/var/cache/man/cat9
/var/cache/man/cat7
/var/cache/man
/var/cache/samba/winbindd_privileged
/var/cache/samba
/var/cache/cups
/var/cache
/var/racoon
/var/lib/dhclient
/var/lib/games
/var/lib/stateless/writable
/var/lib/stateless
/var/lib/yum
/var/lib/multipath
/var/lib/rpm
/var/lib/bluetooth
/var/lib/dhcpv6
/var/lib/scrollkeeper/cs
/var/lib/scrollkeeper/ca
/var/lib/scrollkeeper/kn
/var/lib/scrollkeeper/TOC
/var/lib/scrollkeeper/C
/var/lib/scrollkeeper/nl
/var/lib/scrollkeeper/ru
/var/lib/scrollkeeper/zh_TW
/var/lib/scrollkeeper/ko
/var/lib/scrollkeeper/sr
/var/lib/scrollkeeper/index
/var/lib/scrollkeeper/de
/var/lib/scrollkeeper/pl
/var/lib/scrollkeeper/no
/var/lib/scrollkeeper/vi
/var/lib/scrollkeeper/sv
/var/lib/scrollkeeper/ja
/var/lib/scrollkeeper/sk
/var/lib/scrollkeeper/el
/var/lib/scrollkeeper/ro
/var/lib/scrollkeeper/es
/var/lib/scrollkeeper/it
/var/lib/scrollkeeper/tr
/var/lib/scrollkeeper/be
/var/lib/scrollkeeper/zh_CN
/var/lib/scrollkeeper/pt_BR
/var/lib/scrollkeeper/uk
/var/lib/scrollkeeper/sr@Latn
/var/lib/scrollkeeper/sl
/var/lib/scrollkeeper/am
/var/lib/scrollkeeper/fr
/var/lib/scrollkeeper/hu
/var/lib/scrollkeeper/az
/var/lib/scrollkeeper/da
/var/lib/scrollkeeper
/var/lib/mysql/iss
/var/lib/mysql/nss
/var/lib/mysql/imx
/var/lib/mysql/mysql
/var/lib/mysql/test
/var/lib/mysql/zjlt_sms
/var/lib/mysql/xqt
/var/lib/mysql/mhr
/var/lib/mysql/jforum
/var/lib/mysql/zjlt_mhr
/var/lib/mysql
/var/lib/misc
/var/lib/ntp
/var/lib/sepolgen
/var/lib/hal
/var/lib/nfs/statd/sm.bak
/var/lib/nfs/statd/sm
/var/lib/nfs/statd
/var/lib/nfs/v4recovery
/var/lib/nfs/rpc_pipefs/statd
/var/lib/nfs/rpc_pipefs/portmap
/var/lib/nfs/rpc_pipefs/nfs
/var/lib/nfs/rpc_pipefs/mount
/var/lib/nfs/rpc_pipefs/lockd
/var/lib/nfs/rpc_pipefs
/var/lib/nfs
/var/lib/xkb
/var/lib/dbus
/var/lib/up2date
/var/lib/setroubleshoot
/var/lib/mlocate
/var/lib/alternatives
/var/account
[root@jfht ~]# du -s /var
[root@jfht ~]# du -sh /var
[root@jfht ~]# du -sb /var
[root@jfht ~]# du -sk /var
[root@jfht ~]# du -sm /var
[root@jfht ~]# du --max-depth=1 /var
/var/games
/var/local
/var/spool
/var/empty
/var/crash
/var/preserve
/var/cache
/var/racoon
/var/account
[root@jfht ~]#
示例二 确定哪个目录或文件占用的空间多些
[root@jfht /]# cd
[root@jfht ~]# du -s
[root@jfht ~]# du -s *
anaconda-ks.cfg
install.log
install.log.syslog
2569496 setup
touch_5.sh
vsftpd-2.0.5-16.el5.i386.rpm
vsftpd.conf
while_4.sh
1141036 work191
[root@jfht ~]# du -s * | sort -n
anaconda-ks.cfg
install.log.syslog
touch_5.sh
while_4.sh
vsftpd.conf
install.log
vsftpd-2.0.5-16.el5.i386.rpm
1141040 work191
2569496 setup
[root@jfht ~]# du -s * | sort -nr
2569496 setup
1141048 work191
vsftpd-2.0.5-16.el5.i386.rpm
install.log
vsftpd.conf
while_4.sh
touch_5.sh
install.log.syslog
anaconda-ks.cfg
[root@jfht ~]#
1. du命令不带b,k,m参数时,显示的数值是什么单位的?
2. du命令忽略掉某些目录或文件时怎么做?
【1】中国建站 Linux中du命令使用介绍
【2】Linux安全在线 linux下du命令使用详解---linux统计磁盘空间大小命令
【3】Linux宝库 du和df
【4】Linux大棚 《du命令》-linux命令五分钟系列之三
返回 我使用过的Linux命令系列总目录
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:

我要回帖

更多关于 子线程创建模式对话框 的文章

 

随机推荐