日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Linux命令:查看MySQL表結(jié)構(gòu)的簡(jiǎn)單方法(linux顯示表結(jié)構(gòu))

MySQL是一種流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),廣泛應(yīng)用于Web應(yīng)用程序等領(lǐng)域。當(dāng)處理MySQL數(shù)據(jù)庫(kù)時(shí),很多時(shí)候需要查看表結(jié)構(gòu)以了解數(shù)據(jù)表的設(shè)計(jì)和字段類型。在Linux操作系統(tǒng)中,我們可以通過(guò)一些簡(jiǎn)單的命令來(lái)查看MySQL表結(jié)構(gòu),本文將介紹這些方法。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到羅城網(wǎng)站設(shè)計(jì)與羅城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋羅城地區(qū)。

一、使用DESCRIBE命令

DESCRIBE命令可以顯示一個(gè)數(shù)據(jù)表的字段信息,包括字段名、類型、鍵值等。其語(yǔ)法格式如下:

DESCRIBE table_name;

其中,table_name是要查看的MySQL數(shù)據(jù)表的名稱。

例如,要查看一個(gè)名為user的表的結(jié)構(gòu),可以輸入:

DESCRIBE user;

這將會(huì)顯示出user表的字段信息。例如:

+————+————–+——+—–+———+—————-+

| Field | Type | Null | Key | Default | Extra |

+————+————–+——+—–+———+—————-+

| id | int(11) | NO | PRI | NULL | auto_increment |

| name | varchar(20) | NO | | NULL | |

| age | int(11) | YES | | NULL | |

| gender | char(1) | NO | | NULL | |

| address | varchar(100) | YES | | NULL | |

+————+————–+——+—–+———+—————-+

這里展示了表user的字段信息。其中,列名為Field,表示字段名;Type表示字段類型;Null表示該字段是否可以為空;Key表示該字段是不是鍵值;Default表示默認(rèn)值;Extra表示其他附加信息。

二、使用SHOW命令

SHOW命令也是MySQL查詢命令的一種,它可以用于查看數(shù)據(jù)庫(kù)的各種信息,包括表結(jié)構(gòu)。show命令結(jié)構(gòu)如下:

SHOW COLUMNS FROM table_name;

其中,table_name是要查看的MySQL數(shù)據(jù)表的名稱。

例如,要查看一個(gè)名為user的表的結(jié)構(gòu),可以輸入:

SHOW COLUMNS FROM user;

這將會(huì)顯示出user表的字段信息。與DESCRIBE命令不同的是,SHOW命令可以查看更詳細(xì)的信息,如字段長(zhǎng)度、字符集等。例如:

+————+————–+——+—–+———+—————-+

| Field | Type | Null | Key | Default | Extra |

+————+————–+——+—–+———+—————-+

| id | int(11) | NO | PRI | NULL | auto_increment |

| name | varchar(20) | NO | | NULL | |

| age | int(11) | YES | | NULL | |

| gender | char(1) | NO | | NULL | |

| address | varchar(100) | YES | | NULL | |

+————+————–+——+—–+———+—————-+

5 rows in set (0.00 sec)

此處列出的mysql表結(jié)構(gòu)的信息與DESCRIBE命令顯示的信息是一致的。

三、使用information_schema

information_schema是MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)內(nèi)置的一個(gè)數(shù)據(jù)庫(kù),它包含了對(duì)于MySQL數(shù)據(jù)庫(kù)的各種元數(shù)據(jù)(元數(shù)據(jù)是關(guān)于數(shù)據(jù)的數(shù)據(jù),比如數(shù)據(jù)表的列名、類型、注釋等)信息。我們可以通過(guò)該數(shù)據(jù)庫(kù)中的表獲取更加詳細(xì)的信息。

例如:

SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_KEY, COLUMN_COMMENT

FROM information_schema.COLUMNS

WHERE table_name = ‘user’ AND table_schema = ‘mydatabase’;

這條語(yǔ)句將會(huì)顯示出我們所需的更詳細(xì)的表結(jié)構(gòu)信息,包括字段名、類型、長(zhǎng)度、是否可以為空、默認(rèn)值、鍵值信息和注釋。其中,COLUMN_NAME表示字段名;DATA_TYPE表示數(shù)據(jù)類型;CHARACTER_MAXIMUM_LENGTH表示字符更大長(zhǎng)度;IS_NULLABLE表示是否可以為空;COLUMN_DEFAULT表示默認(rèn)值;COLUMN_KEY表示鍵值;COLUMN_COMMENT表示該字段的注釋信息。

在Linux系統(tǒng)下,我們有多種方法可以查看MySQL表結(jié)構(gòu),包括DESCRIBE命令、SHOW命令以及使用information_schema數(shù)據(jù)庫(kù)。這些命令都很簡(jiǎn)單易用,我們可以根據(jù)自己的需要選擇一種合適的方法來(lái)查看并了解MySQL表結(jié)構(gòu)。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220

一個(gè)Linux多進(jìn)程編程?

1 引言

對(duì)于沒(méi)有接觸過(guò)Unix/Linux操作系統(tǒng)的人來(lái)說(shuō),fork是最難理解的概念之一:它執(zhí)行一次卻返回兩個(gè)值。fork函數(shù)是Unix系統(tǒng)最杰出的成就之一,它是七十年代UNIX早期的開(kāi)發(fā)者經(jīng)過(guò)長(zhǎng)期在理論和實(shí)踐上的艱苦探索后取得的成果,一方面,它使操作系統(tǒng)在進(jìn)程管理上付出了最小的代價(jià),另一方面,又為程序員提供了一個(gè)簡(jiǎn)潔明了的多進(jìn)程方法。與DOS和早期的Windows不同,Unix/Linux系統(tǒng)是真正實(shí)現(xiàn)多任務(wù)操作的系統(tǒng),可以說(shuō),不使用多進(jìn)程編程,就不能算是真正的Linux環(huán)境下編程。

多線程程序設(shè)計(jì)的概念早在六十年代就被提出,但直到八十年代中期,Unix系統(tǒng)中才引入多線程機(jī)制,如今,由于自身的許多優(yōu)點(diǎn),多線程編程已經(jīng)得到了廣泛的應(yīng)用。

下面,我們將介紹在Linux下編寫多進(jìn)程和多線程程序的一些初步知識(shí)。

2 多進(jìn)程編程

什么是一個(gè)漏態(tài)耐進(jìn)程?進(jìn)程這個(gè)概念是針對(duì)系統(tǒng)而不是針對(duì)用戶的,對(duì)用戶來(lái)說(shuō),他面對(duì)的概念是程序。當(dāng)用戶敲入命令執(zhí)行一個(gè)程序的時(shí)候,對(duì)系統(tǒng)而言,它將啟動(dòng)一個(gè)進(jìn)程。但和程序不同的是,在這個(gè)進(jìn)程中,系統(tǒng)可能需要再啟動(dòng)一個(gè)或多個(gè)進(jìn)程來(lái)完成獨(dú)立的多個(gè)任務(wù)。多進(jìn)程編程的主要內(nèi)容包括進(jìn)程控制和進(jìn)程間通信,在了解這些之前,我們先要簡(jiǎn)單知道進(jìn)程的結(jié)構(gòu)。

2.1 Linux下進(jìn)程的結(jié)構(gòu)

Linux下一個(gè)進(jìn)程在內(nèi)存里有三部分的數(shù)據(jù),就是”代碼段”、”堆棧段”和”數(shù)據(jù)段”。其實(shí)學(xué)過(guò)匯編語(yǔ)言的人一定知道,一般的CPU都有上述三種段寄存器,以方便操作系統(tǒng)的運(yùn)行。這三個(gè)部分也是構(gòu)成一個(gè)完整的執(zhí)行序列的必要的部分。

“代碼段”,顧名思義,就是存放了程序代碼的數(shù)據(jù),假如機(jī)器中有數(shù)個(gè)進(jìn)程運(yùn)行相同的一個(gè)程序,那么它們就可以使用相同的代碼段?!倍褩6巍贝娣诺木褪亲映绦虻姆祷氐刂贰⒆映绦虻膮?shù)以及程序的局部變量。而數(shù)據(jù)段則存放程序的全局變量,常數(shù)以及動(dòng)態(tài)數(shù)據(jù)分配的數(shù)據(jù)空間(比如用malloc之類的函數(shù)取得的空間)。這其中有許多細(xì)節(jié)問(wèn)題,這里限于篇幅就不多介紹了。系統(tǒng)如果同時(shí)運(yùn)行數(shù)個(gè)相同的程序,它們之間就不能使用同一個(gè)堆棧段和數(shù)據(jù)段。

2.2 Linux下的進(jìn)程控制

在傳統(tǒng)的Unix環(huán)境下,有兩個(gè)基本的操作用于創(chuàng)建和修改進(jìn)程:函數(shù)fork( )用來(lái)創(chuàng)建一個(gè)新的進(jìn)程,該進(jìn)程幾乎是當(dāng)前進(jìn)程的一個(gè)完全拷貝;函數(shù)族e(cuò)xec( )用來(lái)啟動(dòng)另外的進(jìn)程以取代當(dāng)前運(yùn)行的進(jìn)程。Linux的進(jìn)程控制和傳統(tǒng)的Unix進(jìn)程控制基本一致,只在一些細(xì)節(jié)的地方有些區(qū)別,例如在Linux系統(tǒng)中調(diào)用vfork和fork完全相同,而在有些版本的Unix系統(tǒng)中,vfork調(diào)用有不同的功能。由于這些差別幾乎不影響我們大多數(shù)的編程,在這里我們不予考慮。

2.2.1 fork( )

fork在英文中是”分叉”的意思。為什么取這個(gè)名字呢返春?因?yàn)橐粋€(gè)進(jìn)程在運(yùn)行中,如果使用了fork,就產(chǎn)生了另一個(gè)進(jìn)程,于是進(jìn)程就”分叉”了,所以這個(gè)名字取得很形象。下面就看看如何具體使用fork,這段程序演示了使用fork的基本框閉櫻架:

void main(){

int i;

if ( fork() == 0 ) {

/* 子進(jìn)程程序 */

for ( i = 1; i ” );

fgets( command, 256, stdin );

command = 0;

if ( fork() == 0 ) {

/* 子進(jìn)程執(zhí)行此命令 */

execlp( command, command );

/* 如果exec函數(shù)返回,表明沒(méi)有正常執(zhí)行命令,打印錯(cuò)誤信息*/

perror( command );

exit( errorno );

}

else {

/* 父進(jìn)程, 等待子進(jìn)程結(jié)束,并打印子進(jìn)程的返回值 */

wait ( &rtn );

printf( ” child process return %d\n”,. rtn );

}

}

}

此程序從終端讀入命令并執(zhí)行之,執(zhí)行完成后,父進(jìn)程繼續(xù)等待從終端讀入命令。熟悉DOS和WINDOWS系統(tǒng)調(diào)用的朋友一定知道DOS/WINDOWS也有exec類函數(shù),其使用方法是類似的,但DOS/WINDOWS還有spawn類函數(shù),因?yàn)镈OS是單任務(wù)的系統(tǒng),它只能將”父進(jìn)程”駐留在機(jī)器內(nèi)再執(zhí)行”子進(jìn)程”,這就是spawn類的函數(shù)。WIN32已經(jīng)是多任務(wù)的系統(tǒng)了,但還保留了spawn類函數(shù),WIN32中實(shí)現(xiàn)spawn函數(shù)的方法同前述UNIX中的方法差不多,開(kāi)設(shè)子進(jìn)程后父進(jìn)程等待子進(jìn)程結(jié)束后才繼續(xù)運(yùn)行。UNIX在其一開(kāi)始就是多任務(wù)的系統(tǒng),所以從核心角度上講不需要spawn類函數(shù)。

在這一節(jié)里,我們還要講講system()和popen()函數(shù)。system()函數(shù)先調(diào)用fork(),然后再調(diào)用exec()來(lái)執(zhí)行用戶的登錄shell,通過(guò)它來(lái)查找可執(zhí)行文件的命令并分析參數(shù),最后它么使用wait()函數(shù)族之一來(lái)等待子進(jìn)程的結(jié)束。函數(shù)popen()和函數(shù)system()相似,不同的是它調(diào)用pipe()函數(shù)創(chuàng)建一個(gè)管道,通過(guò)它來(lái)完成程序的標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出。這兩個(gè)函數(shù)是為那些不太勤快的程序員設(shè)計(jì)的,在效率和安全方面都有相當(dāng)?shù)娜毕?,在可能的情況下,應(yīng)該盡量避免。

2.3 Linux下的進(jìn)程間通信

詳細(xì)的講述進(jìn)程間通信在這里絕對(duì)是不可能的事情,而且筆者很難有信心說(shuō)自己對(duì)這一部分內(nèi)容的認(rèn)識(shí)達(dá)到了什么樣的地步,所以在這一節(jié)的開(kāi)頭首先向大家推薦著名作者Richard Stevens的著名作品:《Advanced Programming in the UNIX Environment》,它的中文譯本《UNIX環(huán)境高級(jí)編程》已有機(jī)械工業(yè)出版社出版,原文精彩,譯文同樣地道,如果你的確對(duì)在Linux下編程有濃厚的興趣,那么趕緊將這本書(shū)擺到你的書(shū)桌上或計(jì)算機(jī)旁邊來(lái)。說(shuō)這么多實(shí)在是難抑心中的景仰之情,言歸正傳,在這一節(jié)里,我們將介紹進(jìn)程間通信最最初步和最最簡(jiǎn)單的一些知識(shí)和概念。

首先,進(jìn)程間通信至少可以通過(guò)傳送打開(kāi)文件來(lái)實(shí)現(xiàn),不同的進(jìn)程通過(guò)一個(gè)或多個(gè)文件來(lái)傳遞信息,事實(shí)上,在很多應(yīng)用系統(tǒng)里,都使用了這種方法。但一般說(shuō)來(lái),進(jìn)程間通信(IPC:InterProcess Communication)不包括這種似乎比較低級(jí)的通信方法。Unix系統(tǒng)中實(shí)現(xiàn)進(jìn)程間通信的方法很多,而且不幸的是,極少方法能在所有的Unix系統(tǒng)中進(jìn)行移植(唯一一種是半雙工的管道,這也是最原始的一種通信方式)。而Linux作為一種新興的操作系統(tǒng),幾乎支持所有的Unix下常用的進(jìn)程間通信方法:管道、消息隊(duì)列、共享內(nèi)存、信號(hào)量、套接口等等。下面我們將逐一介紹。

   2.3.1 管道

管道是進(jìn)程間通信中最古老的方式,它包括無(wú)名管道和有名管道兩種,前者用于父進(jìn)程和子進(jìn)程間的通信,后者用于運(yùn)行于同一臺(tái)機(jī)器上的任意兩個(gè)進(jìn)程間的通信。

無(wú)名管道由pipe()函數(shù)創(chuàng)建:

#include

int pipe(int filedis);

參數(shù)filedis返回兩個(gè)文件描述符:filedes為讀而打開(kāi),filedes為寫而打開(kāi)。filedes的輸出是filedes的輸入。下面的例子示范了如何在父進(jìn)程和子進(jìn)程間實(shí)現(xiàn)通信。

#define INPUT 0

#define OUTPUT 1

void main() {

int file_descriptors;

/*定義子進(jìn)程號(hào) */

pid_t pid;

char buf;

int returned_count;

/*創(chuàng)建無(wú)名管道*/

pipe(file_descriptors);

/*創(chuàng)建子進(jìn)程*/

if((pid = fork()) == -1) {

printf(“Error in fork\n”);

exit(1);

}

/*執(zhí)行子進(jìn)程*/

if(pid == 0) {

printf(“in the spawned (child) process…\n”);

/*子進(jìn)程向父進(jìn)程寫數(shù)據(jù),關(guān)閉管道的讀端*/

close(file_descriptors);

write(file_descriptors, “test data”, strlen(“test data”));

exit(0);

} else {

/*執(zhí)行父進(jìn)程*/

printf(“in the spawning (parent) process…\n”);

/*父進(jìn)程從管道讀取子進(jìn)程寫的數(shù)據(jù),關(guān)閉管道的寫端*/

close(file_descriptors);

returned_count = read(file_descriptors, buf, sizeof(buf));

printf(“%d bytes of data received from spawned process: %s\n”,

returned_count, buf);

}

}

在Linux系統(tǒng)下,有名管道可由兩種方式創(chuàng)建:命令行方式mknod系統(tǒng)調(diào)用和函數(shù)mkfifo。下面的兩種途徑都在當(dāng)前目錄下生成了一個(gè)名為myfifo的有名管道:

方式一:mkfifo(“myfifo”,”rw”);

方式二:mknod myfifo p

生成了有名管道后,就可以使用一般的文件I/O函數(shù)如open、close、read、write等來(lái)對(duì)它進(jìn)行操作。下面即是一個(gè)簡(jiǎn)單的例子,假設(shè)我們已經(jīng)創(chuàng)建了一個(gè)名為myfifo的有名管道。

/* 進(jìn)程一:讀有名管道*/

#include

#include

void main() {

FILE * in_file;

int count = 1;

char buf;

in_file = fopen(“mypipe”, “r”);

if (in_file == NULL) {

printf(“Error in fdopen.\n”);

exit(1);

}

while ((count = fread(buf, 1, 80, in_file)) > 0)

printf(“received from pipe: %s\n”, buf);

fclose(in_file);

}

/* 進(jìn)程二:寫有名管道*/

#include

#include

void main() {

FILE * out_file;

int count = 1;

char buf;

out_file = fopen(“mypipe”, “w”);

if (out_file == NULL) {

printf(“Error opening pipe.”);

exit(1);

}

sprintf(buf,”this is test data for the named pipe example\n”);

fwrite(buf, 1, 80, out_file);

fclose(out_file);

}

2.3.2 消息隊(duì)列

消息隊(duì)列用于運(yùn)行于同一臺(tái)機(jī)器上的進(jìn)程間通信,它和管道很相似,事實(shí)上,它是一種正逐漸被淘汰的通信方式,我們可以用流管道或者套接口的方式來(lái)取代它,所以,我們對(duì)此方式也不再解釋,也建議讀者忽略這種方式。

2.3.3 共享內(nèi)存

共享內(nèi)存是運(yùn)行在同一臺(tái)機(jī)器上的進(jìn)程間通信最快的方式,因?yàn)閿?shù)據(jù)不需要在不同的進(jìn)程間復(fù)制。通常由一個(gè)進(jìn)程創(chuàng)建一塊共享內(nèi)存區(qū),其余進(jìn)程對(duì)這塊內(nèi)存區(qū)進(jìn)行讀寫。得到共享內(nèi)存有兩種方式:映射/dev/mem設(shè)備和內(nèi)存映像文件。前一種方式不給系統(tǒng)帶來(lái)額外的開(kāi)銷,但在現(xiàn)實(shí)中并不常用,因?yàn)樗刂拼嫒〉膶⑹菍?shí)際的物理內(nèi)存,在Linux系統(tǒng)下,這只有通過(guò)限制Linux系統(tǒng)存取的內(nèi)存才可以做到,這當(dāng)然不太實(shí)際。常用的方式是通過(guò)shmXXX函數(shù)族來(lái)實(shí)現(xiàn)利用共享內(nèi)存進(jìn)行存儲(chǔ)的。

首先要用的函數(shù)是shmget,它獲得一個(gè)共享存儲(chǔ)標(biāo)識(shí)符。

#include

#include

#include

int shmget(key_t key, int size, int flag);

這個(gè)函數(shù)有點(diǎn)類似大家熟悉的malloc函數(shù),系統(tǒng)按照請(qǐng)求分配size大小的內(nèi)存用作共享內(nèi)存。Linux系統(tǒng)內(nèi)核中每個(gè)IPC結(jié)構(gòu)都有的一個(gè)非負(fù)整數(shù)的標(biāo)識(shí)符,這樣對(duì)一個(gè)消息隊(duì)列發(fā)送消息時(shí)只要引用標(biāo)識(shí)符就可以了。這個(gè)標(biāo)識(shí)符是內(nèi)核由IPC結(jié)構(gòu)的關(guān)鍵字得到的,這個(gè)關(guān)鍵字,就是上面之一個(gè)函數(shù)的key。數(shù)據(jù)類型key_t是在頭文件sys/types.h中定義的,它是一個(gè)長(zhǎng)整形的數(shù)據(jù)。在我們后面的章節(jié)中,還會(huì)碰到這個(gè)關(guān)鍵字。

當(dāng)共享內(nèi)存創(chuàng)建后,其余進(jìn)程可以調(diào)用shmat()將其連接到自身的地址空間中。

void *shmat(int shmid, void *addr, int flag);

shmid為shmget函數(shù)返回的共享存儲(chǔ)標(biāo)識(shí)符,addr和flag參數(shù)決定了以什么方式來(lái)確定連接的地址,函數(shù)的返回值即是該進(jìn)程數(shù)據(jù)段所連接的實(shí)際地址,進(jìn)程可以對(duì)此進(jìn)程進(jìn)行讀寫操作。

linux顯示表結(jié)構(gòu)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux顯示表結(jié)構(gòu),Linux命令:查看MySQL表結(jié)構(gòu)的簡(jiǎn)單方法,一個(gè)Linux多進(jìn)程編程?的信息別忘了在本站進(jìn)行查找喔。

成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過(guò)多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開(kāi)發(fā)和營(yíng)銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!


網(wǎng)站題目:Linux命令:查看MySQL表結(jié)構(gòu)的簡(jiǎn)單方法(linux顯示表結(jié)構(gòu))
瀏覽路徑:http://m.5511xx.com/article/djoddjo.html