PTM存儲
A. C++怎麼將系統時間(時、分、秒)保存到變數中
無時無刻將系統時間讀取過來,並存放到變數當中
B. 2021年粵港澳大灣區車展將於6月12日舉辦 多款新車將登台
通過優化,Taycan Cross Turismo的風阻系數僅為0.26Cd,這對於降低能耗以及續航有相當大的幫助。沒有百葉窗的通風口採用電子控制,並且首次集成到空調系統的全自動控制中。可選的熱泵利用來自動力系統的廢熱來有效地加熱汽車內部。這方面為乘客提供了便利,特別是在低溫環境下。
在動力層面上,Taycan Cross Turismo與普通的Taycan相比,在同為入門車型上,Taycan Cross Turismo的動力參數要更強一些。在Turbo S車型上,<
C. C++ 如何顯示系統時間並且保存到變數中
time_t pBeginTime = time(NULL);
struct tm *ptmBegin; //需要一個tm結構體,這個結構體是標准庫里的
ptmBegin= gmtime(&pBeginTime); //把time_t給tm結構體
CString strBT;
strBT.Format(「%d月%d日 %d:%d」,ptmBegin->tm_mon,ptmBegin->tm_mday,ptmBegin->tm_hour,ptmBegin->tm_min);//用Format把tm類型轉換成CString類型
string time=strBT.GetBuffer(); //把CString轉換成string類型
D. 你手中有些從右向左讀的詩句,比如「rose red red a like is luve my O」。 現在為了閱讀這些美妙的詩句
//寫了一個支持雙空格,記錄輸出長度不變的代碼
//rose red red a like is luve my O 輸出O my luve is like a red red rose
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <fstream>
using namespace std;
#define DELIMITER " "
int main(int argc,char** argv)
{
if(argc!=3)
{
cout << "Rerun progam! cmd Argument must take two file names" <<endl;
exit(0);
}
char buf[512]={0};
fstream out(argv[1]);
fstream in(argv[2]);
while(out.getline(buf,512))
{
int len = strlen(buf)+1;
int last = len - 1;
int value_count = 0;//每個單詞的長度
int total_count = 0;//偏移到指針移到動的
char *pnew = new char[len];
memset(pnew,0,len);
char *ptmp1 = buf;
char *ptmp2 = buf;
while(*ptmp1)
{
if(*ptmp1==' ')
{
total_count += value_count;
strncpy(pnew+(last-total_count),ptmp2,value_count);//把單詞復制到目的地
value_count++;
total_count += 1;
strncpy(pnew+(last-total_count)," ",1);//空格
ptmp2 = ptmp2 + value_count; //修改指針指向
value_count=0;
}
else value_count++;
ptmp1++;
}
if(value_count!=0)//最後一個單詞處理。
{
total_count += value_count;
strncpy(pnew+(last-total_count),ptmp2,value_count);
ptmp2 = ptmp2+value_count;
}
in << pnew << endl;
delete[]pnew;
memset(buf,0,sizeof(buf));
}
}
E. 戴爾BIOS firmwareTPM 是什麼
PM安全晶元,是指符合TPM(Trusted Platform Mole,可信賴平台模塊)標準的安全晶元,它能有效地保護PC、防止非法用戶訪問。
TPM標准:1999年10月,多家IT巨頭聯合發起成立可信賴運算平台聯盟(Trusted Computing Platform Alliance,TCPA),初期加入者有康柏 、HP 、IBM、Intel、微軟等,該聯盟致力於促成新一代具有安全且可信賴的硬體運算平台。
2003年3月,TCPA增加了諾基亞 、索尼等廠家的加入,並改組為可信賴計算組織(Trusted Computing Group,TCG),希望從跨平台和操作環境的硬體和軟體兩方面,制定可信賴電腦相關標准和規范。並在並提出了TPM規范,目前最新版本為1.2。
符合TPM的晶元首先必須具有產生加解密密匙的功能,此外還必須能夠進行高速的資料加密和解密,以及充當保護BIOS和操作系統不被修改的輔助處理器。
(5)PTM存儲擴展閱讀:
TPM安全晶元用途十分廣泛,配合專用軟體可以實現以下用途:
1、存儲、管理BIOS開機密碼以及硬碟 密碼。以往這些事務都是由BIOS做的,玩過的朋友可能也知道,忘記了密碼只要取下BIOS電池,給BIOS放電就清除密碼了。如今這些密鑰實際上是存儲在固化在晶元的存儲單元中,即便是掉電其信息亦不會丟失。相比於BIOS管理密碼,TPM安全晶元的安全性要大為提高。
2、TPM安全晶元可以進行范圍較廣的加密。TPM安全晶元除了能進行傳統的開機加密以及對硬碟進行加密外,還能對系統登錄、應用軟體登錄進行加密。比如目前咱們常用的MSN、QQ、網游以及網上銀行的登錄信息和密碼,都可以通過TPM加密後再進行傳輸,這樣就不用擔心信息和密碼被人竊齲
3、加密硬碟的任意分區。我們可以加密本本上的任意一個硬碟分區,您可以將一些敏感的文件放入該分區以策安全。其實有些本本廠商採用的一鍵恢復功能,就是該用途的集中體現之一(其將系統鏡像放在一個TPM加密的分區中)。
F. vc用什麼存儲坐標
CPoint類或者POiNT結構體,他們的表示存儲一個點的X,Y軸坐標
G. 如何在進程崩潰後列印堆棧並防止數據丟失
進程在運行過程中遇到邏輯錯誤, 比如除零, 空指針等等, 系統會觸發一個軟體中斷.
這個中斷會以信號的方式通知進程, 這些信號的默認處理方式是結束進程.
發生這種情況, 我們就認為進程崩潰了.
進程崩潰後, 我們會希望知道它是為何崩潰的, 是哪個函數, 哪行代碼引起的錯誤.
另外, 在進程退出前, 我們還希望做一些善後處理, 比如把某些數據存入資料庫, 等等.
下面, 我會介紹一些技術來達成這兩個目標.
1. 在core文件中查看堆棧信息
如果進程崩潰時, 我們能看到當時的堆棧信息, 就能很快定位到錯誤的代碼.
在 gcc 中加入 -g 選項, 可執行文件中便會包含調試信息. 進程崩潰後, 會生成一個 core 文件.
我們可以用 gdb 查看這個 core 文件, 從而知道進程崩潰時的環境.
在調試階段, core文件能給我們帶來很多便利. 但是在正式環境中, 它有很大的局限:
1. 包含調試信息的可執行文件會很大. 並且運行速度也會大幅降低.
2. 一個 core 文件常常很大, 如果進程頻繁崩潰, 硬碟資源會變得很緊張.
所以, 在正式環境中運行的程序, 不會包含調試信息.
它的core文件的大小, 我們會把它設為0, 也就是不會輸入core文件.
在這個前提下, 我們如何得到進程的堆棧信息呢?
2. 動態獲取線程的堆棧
c 語言提供了 backtrace 函數, 通過這個函數可以動態的獲取當前線程的堆棧.
要使用 backtrace 函數, 有兩點要求:
1. 程序使用的是 ELF 二進制格式.
2. 程序連接時使用了 -rdynamic 選項.
-rdynamic可用來通知鏈接器將所有符號添加到動態符號表中, 這些信息比 -g 選項的信息要少得多.
下面是將要用到的函數說明:
#include <execinfo.h>
int backtrace(void **buffer,int size);
用於獲取當前線程的調用堆棧, 獲取的信息將會被存放在buffer中, 它是一個指針列表。
參數 size 用來指定buffer中可以保存多少個void* 元素。
函數返回值是實際獲取的指針個數, 最大不超過size大小
注意: 某些編譯器的優化選項對獲取正確的調用堆棧有干擾,
另外內聯函數沒有堆棧框架; 刪除框架指針也會導致無法正確解析堆棧內容;
char ** backtrace_symbols (void *const *buffer, int size)
把從backtrace函數獲取的信息轉化為一個字元串數組.
參數buffer應該是從backtrace函數獲取的指針數組,
size是該數組中的元素個數(backtrace的返回值) ;
函數返回值是一個指向字元串數組的指針, 它的大小同buffer相同.
每個字元串包含了一個相對於buffer中對應元素的可列印信息.
它包括函數名,函數的偏移地址, 和實際的返回地址.
該函數的返回值是通過malloc函數申請的空間, 因此調用者必須使用free函數來釋放指針.
注意: 如果不能為字元串獲取足夠的空間, 函數的返回值將會為NULL.
void backtrace_symbols_fd (void *const *buffer, int size, int fd)
與backtrace_symbols 函數具有相同的功能,
不同的是它不會給調用者返回字元串數組, 而是將結果寫入文件描述符為fd的文件中,每個函數對應一行.
3. 捕捉信號
我們希望在進程崩潰時列印堆棧, 所以我們需要捕捉到相應的信號. 方法很簡單.
#include <signal.h>
void (*signal(int signum,void(* handler)(int)))(int);
或者: typedef void(*sig_t) ( int );
sig_t signal(int signum,sig_t handler);
參數說明:
第一個參數signum指明了所要處理的信號類型,它可以是除了SIGKILL和SIGSTOP外的任何一種信號。
第二個參數handler描述了與信號關聯的動作,它可以取以下三種值:
1. 一個返回值為正數的函數的地址, 也就是我們的信號處理函數.
這個函數應有如下形式的定義: int func(int sig); sig是傳遞給它的唯一參數。
執行了signal()調用後,進程只要接收到類型為sig的信號,不管其正在執行程序的哪一部分,就立即執行func()函數。
當func()函數執行結束後,控制權返回進程被中斷的那一點繼續執行。
2. SIGIGN, 忽略該信號.
3. SIGDFL, 恢復系統對信號的默認處理。
返回值: 返回先前的信號處理函數指針,如果有錯誤則返回SIG_ERR(-1)。
注意:
當一個信號的信號處理函數執行時,如果進程又接收到了該信號,該信號會自動被儲存而不會中斷信號處理函數的執行,
直到信號處理函數執行完畢再重新調用相應的處理函數。
如果在信號處理函數執行時進程收到了其它類型的信號,該函數的執行就會被中斷。
在信號發生跳轉到自定的handler處理函數執行後,系統會自動將此處理函數換回原來系統預設的處理方式,
如果要改變此操作請改用sigaction()。
4. 實例
下面我們實際編碼, 看看具體如何在捕捉到信號後, 列印進程堆棧, 然後結束進程.
#include <iostream>
#include <time.h>
#include <signal.h>
#include <string.h>
#include <execinfo.h>
#include <fcntl.h>
#include <map>
using namespace std;
map<int, string> SIG_LIST;
#define SET_SIG(sig) SIG_LIST[sig] = #sig;
void SetSigList(){
SIG_LIST.clear();
SET_SIG(SIGILL)//非法指令
SET_SIG(SIGBUS)//匯流排錯誤
SET_SIG(SIGFPE)//浮點異常
SET_SIG(SIGABRT)//來自abort函數的終止信號
SET_SIG(SIGSEGV)//無效的存儲器引用(段錯誤)
SET_SIG(SIGPIPE)//向一個沒有讀用戶的管道做寫操作
SET_SIG(SIGTERM)//軟體終止信號
SET_SIG(SIGSTKFLT)//協處理器上的棧故障
SET_SIG(SIGXFSZ)//文件大小超出限制
SET_SIG(SIGTRAP)//跟蹤陷阱
}
string& GetSigName(int sig){
return SIG_LIST[sig];
}
void SaveBackTrace(int sig){
//打開文件
time_t tSetTime;
time(&tSetTime);
tm* ptm = localtime(&tSetTime);
char fname[256] = {0};
sprintf(fname, "core.%d-%d-%d_%d_%d_%d",
ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday,
ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
FILE* f = fopen(fname, "a");
if (f == NULL){
exit(1);
}
int fd = fileno(f);
//鎖定文件
flock fl;
fl.l_type = F_WRLCK;
fl.l_start = 0;
fl.l_whence = SEEK_SET;
fl.l_len = 0;
fl.l_pid = getpid();
fcntl(fd, F_SETLKW, &fl);
//輸出程序的絕對路徑
char buffer[4096];
memset(buffer, 0, sizeof(buffer));
int count = readlink("/proc/self/exe", buffer, sizeof(buffer));
if(count > 0){
buffer[count] = '\n';
buffer[count + 1] = 0;
fwrite(buffer, 1, count+1, f);
}
//輸出信息的時間
memset(buffer, 0, sizeof(buffer));
sprintf(buffer, "Dump Time: %d-%d-%d %d:%d:%d\n",
ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday,
ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
fwrite(buffer, 1, strlen(buffer), f);
//線程和信號
sprintf(buffer, "Curr thread: %d, Catch signal:%s\n",
pthread_self(), GetSigName(sig).c_str());
fwrite(buffer, 1, strlen(buffer), f);
//堆棧
void* DumpArray[256];
int nSize = backtrace(DumpArray, 256);
sprintf(buffer, "backtrace rank = %d\n", nSize);
fwrite(buffer, 1, strlen(buffer), f);
if (nSize > 0){
char** symbols = backtrace_symbols(DumpArray, nSize);
if (symbols != NULL){
for (int i=0; i<nSize; i++){
fwrite(symbols[i], 1, strlen(symbols[i]), f);
fwrite("\n", 1, 1, f);
}
free(symbols);
}
}
//文件解鎖後關閉, 最後終止進程
fl.l_type = F_UNLCK;
fcntl(fd, F_SETLK, &fl);
fclose(f);
exit(1);
}
void SetSigCatchFun(){
map<int, string>::iterator it;
for (it=SIG_LIST.begin(); it!=SIG_LIST.end(); it++){
signal(it->first, SaveBackTrace);
}
}
void Fun(){
int a = 0;
int b = 1 / a;
}
static void* ThreadFun(void* arg){
Fun();
return NULL;
}
int main(){
SetSigList();
SetSigCatchFun();
printf("main thread id = %d\n", (pthread_t)pthread_self());
pthread_t pid;
if (pthread_create(&pid, NULL, ThreadFun, NULL)){
exit(1);
}
printf("fun thread id = %d\n", pid);
for(;;){
sleep(1);
}
return 0;
}
文件名為 bt.cpp
編譯: g++ bt.cpp -rdynamic -I /usr/local/include -L /usr/local/lib -pthread -o bt
主線程創建了 fun 線程, fun 線程有一個除零錯誤, 系統拋出 SIGFPE 信號.
該信號使 fun 線程中斷, 我們注冊的 SaveBackTrace 函數捕獲到這個信號, 列印相關信息, 然後終止進程.
在輸出的core文件中, 我們可以看到簡單的堆棧信息.
5. 善後處理
在上面的例子中, fun 線程被 SIGFPE 中斷, 轉而執行 SaveBackTrace 函數.
此時, main 線程仍然在正常運行.
如果我們把 SaveBackTrace 函數最後的 exit(1); 替換成 for(;;)sleep(1);
main 線程就可以一直正常的運行下去.
利用這個特點, 我們可以做很多其它事情.
游戲的伺服器進程常常有這些線程:
網路線程, 資料庫線程, 業務處理線程. 引發邏輯錯誤的代碼常常位於業務處理線程.
而資料庫線程由於功能穩定, 邏輯簡單, 是十分強壯的.
那麼, 如果業務處理線程有邏輯錯誤, 我們捕捉到信號後, 可以在信號處理函數的最後,
通知資料庫線程保存游戲數據.
直到資料庫線程把游戲信息全部存入資料庫, 信號處理函數才返回.
這樣, 伺服器宕機不會導致回檔, 損失被大大降低.
要實現這個機制, 要求資料庫模塊和業務處理模塊具有低耦合度.
當然, 實際應用的時候, 還有許多細節要考慮.
比如, 業務處理線程正在處理玩家的數據, 由於發生不可預知的錯誤, 玩家的數據被損壞了, 這些玩家的數據就不應該被存入資料庫.
H. 音樂的格式都有哪些分別都是什麼意思比如mp3.wma之類。
8svx,svx,ac3,aifc,aiff,aif,apl,snd,au,cda,cue,flac,fla,iff,hmp,rmi,mids,hmi,mus,cmf,gmf,midi,mid,xmi,mac,ape,mp1,mp2,mp3,mp4,m4a,mpc,mpp,mp+,ogg,aac,spx,wav,wv,wma,m3u,fpl,m3u8,pls,it,itz,s3m,dsm,s3z,xmz,j2b,mod,stm,mdz,psm,stz,ptm,umx,ptz,amf,mtm,xm,mtz,am,669
8SVX
相關信息 一種Amiga 多媒體計算器系統 8-位 聲音文件。
SVX
Amiga聲音(.SVX):Commodore所開發的聲音文件格式,被Amiga平台和應用程序所支持,不支持壓縮。 一般播放器默認不支持這種格式的音頻,需要在安裝時安裝相關插件。
AC3
(全稱Audio Coding3音頻編碼3)是杜比數碼的同義詞,杜比數碼是一種高級音頻壓縮技術,它最多可以
對6個比特率最高為448kbps的單獨聲道進行編碼。
AIFF-C
是包括能力壓縮音像數據格式的一個新版本。
AIFF
是音像互換文件格式, 一個格式為存放數字式音像樣品在文件。
AIF
一種音頻互交換文件,Silicon Graphic and Macintosh應用程序的聲音格式。
APL
一種音頻文件。
打開方式:用winamp 5.0以上或更高版本播放。
SND
1.NeXT聲音文件,用winamp等軟體打開。
2.Mac聲音資源。
3.原始的未符號化的PCM數據。
4.AKAI MPC系列抽樣文件。
AU
1.Sun/NeXT/DEC/UNIX聲音文件,用winamp等軟體打開。
2.音頻U-Law(讀作「mu-law」)文件格式。
CDA
音樂文件,CD音頻軌道。
CUE
1.一種Microsoft提示牌數據文件。
2.一首歌開始播放點,通常是某小節的第一拍,但也有人覺得第二拍較准,抓 Cue 點的目的是要接歌必須讓兩首歌速度一樣,而舞曲的正常行進方式為 4/4 拍(即每個小節 4 拍,4 分音符為一拍),當一首歌在第 4 個 4 拍結束另一小節出來時, 將手上抓到的 Cue點同時播出。
FLAC
即是Free Lossless Audio Codec的縮寫,中文可解為無損音頻壓縮編碼。FLAC是一套著名的自由音頻壓縮編碼,其特點是無損壓縮。不同於其他有損壓縮編碼如MP3 及 AAC,它不會破任何原有的音頻資訊,所以可以還原音樂光碟音質。現在它已被很多軟體及硬體音頻產品所支持。
FLA
一種Macromedia Flash電影。
IFF
1.交換文件格式的圖像格式,用ACDSEE等軟體打開。
2.Amiga ILBM。
RMI
一種MiDi音樂文件。
MIDS
一種midi流文件。
CMF
是Creative公司所使用的類似於MIDI的一種音頻文件格式
MIDI
是Musical Instrument Digital Interface的縮寫,直接翻譯過來的意思就是樂器數字化介面,可以把MIDI理解成是一種協議、一種標准、或是一種技術,但不要把它看作是某個硬體設備.
MID
MID是midi的簡稱,是它的擴展名
XMI
一種midi格式的文件,是XML的一種應用,它是為了在程序員和其它程序員之間交換元數據。XMI也可以幫助程序員應用UML語言解決不同語言編程的問題,除此以外,XMI也是和數據倉庫交換數據的重要方法之一。XMI比較有效地定義了不同應用,不同平台上元數據交換的問題。
APE
是目前流行的數字音樂文件格式之一。與MP3這類有損壓縮方式不同,APE是一種無損壓縮技術,也就是說當你將從音頻CD上讀取的音頻數據文件壓縮成APE格式後,你還可以再將APE格式的文件還原,而還原後的音頻文件與壓縮前的一模一樣,沒有任何損失。APE的文件大小大概為CD的一半,但是隨著寬頻的普及,APE格式受到了許多音樂愛好者的喜愛,特別是對於希望通過網路傳輸音頻CD的朋友來說,APE可以幫助他們節約大量的資源。
MP1(MPEG-1)
用於傳輸1.5Mbps數據傳輸率的數字存儲媒體運動圖像及其伴音的編碼,經過MPEG-1標准壓縮後,視頻數據壓縮率為1/100-1/200,音頻壓縮率為1/6.5。MPEG-1提供每秒30幀352*240解析度的圖像,當使用合適的壓縮技術時,具有接近家用視頻制式(VHS)錄像帶的質量。 MPEG-1允許超過70分鍾的高質量的視頻和音頻存儲在一張CD-ROM盤上。VCD採用的就是MPEG-1的標准,該標準是一個面向家庭電視質量級的視頻、音頻壓縮標准。
MP4
最初是一種音頻格式,和MPEG-4沒有太大的關系,就像MP3和MPEG-3沒有關系一樣。MP3是MPEG-1 Audio Layer 3 的縮寫;而MP4是MPEG-2 AAC,完完全全是一種音頻壓縮格式, 增加了諸如對立體聲的完美再現、多媒體控制、降噪等新特性,最重要的是,MP4通過特殊的技術實現數碼版權保護,這是MP3所無法比擬的。
M4A
是MPEG4音頻標準的文件的擴展名。在MPEG4標准中提到,普通的MPEG4文件擴展名是.mp4。自從Apple開始在它的iTunes以及 iPod中使用.m4a以區別MPEG4的視頻和音頻文件以來,.m4a這個擴展名變得流行了。目前,幾乎所有支持MPEG4音頻的軟體都支持.m4a。最常用的.m4a文件是使用AAC格式的(文件),不過其他的格式,比如Apple Lossless甚至mp3也可以被放在.m4a容器里(TC註:這個container的概念類似於.mkv文件)。可以安全的把只包含音頻的.mp4 文件的擴展名改成.m4a,以便讓它能在你喜歡的播放器里播放,反之亦然。
MPC
也稱作Musepack(以前叫MP+),由MP2派生出來,是一個免費的Windows Media Player外殼程序,如果讓MPC單獨工作,它並不能工作得很好,因MPC雖然已經內置了DVD解碼功能,但要播放其它類型的媒 體還需要另外安裝Decoder(解碼器)和Filter(濾鏡)。但如果已經安裝了相應的Decoder和Filter,用它則異常方便,也可以說是目前功能最強大的免費播放軟體。
Ogg
(ogg Vorbis) 是一種新的音頻壓縮格式,類似於MP3等現有的音樂格式。但有一點不同的是,它是完全免費、開放和沒有專利限制的。Vorbis 是這種音頻壓縮機制的名字,而Ogg則是一個計劃的名字,該計劃意圖設計一個完全開放性的多媒體系統。目前該計劃只實現了OggVorbis這一部分。
AAC
(高級音頻編碼技術 Advanced Audio Coding),出現於1997年,是基於MPEG-2的音頻編碼技術。由Fraunhofer IIS、杜比、蘋果、AT&T、索尼等公司共同開發,以取代mp3格式。2000年,MPEG-4標准出台,AAC從新整合了其特性,故現又稱MPEG-4 AAC,即m4a。
SPX
Sound Proction extensions,新的音頻渲染引擎內置了事件建模、物理建模和靈活可升級的軟DSP數字信號處理等新一代合成技術。它還能利用雙聲道立體聲音箱模擬劇場環繞效果,並將低音提升引擎整合入音頻輸出當中,增強低音表現。
WAV
是Microsoft Windows本身提供的音頻格式,由於Windows本身的影響力,這個格式已經成為了事實上的通用音頻格式。不客氣地說,它實際上是Apple電腦的AIFF格式的克隆。通常我們使用WAV格式都是用來保存一些沒有壓縮的音頻,但實際上WAV格式的設計是非常靈活(非常復雜)的,該格式本身與任何媒體數據都不沖突,換句話說,只要有軟體支持,你甚至可以在WAV格式裡面存放圖像。之所以能這樣,是因為WAV文件裡面存放的每一塊數據都有自己獨立的標識,通過這些標識可以告訴用戶究竟這是什麼數據。在WINDOWS平台上通過ACM(Audio Compression Manager)結構及相應的驅動程序(在這里通常稱為CODEC,編碼/解碼器),可以在WAV文件中存放超過20種的壓縮格式,比如ADPCM、GSM、CCITT G.711、G.723等等,當然也包括MP3格式。
WMA
全稱是Windows Media Audio,它是微軟公司推出的與MP3格式齊名的一種新的音頻格式。由於WMA在壓縮比和音質方面都超過了MP3,更是遠勝於RA(Real Audio),即使在較低的采樣頻率下也能產生較好的音質。
M3U
是mp3播放器媒體文件的播放列表文件。你可以用任何的文本編輯器打開它,在進行播放時,播放軟體並不是播放它,而是根據它的記錄找到相應的文件夾或是網路地址進行播放。M3U文件的「體積」很小,因為它裡面沒有任何媒體數據。
fpl
音頻菜單文件。
pls
媒體播放列表文件。
s3m
模塊音樂文件。