?? 08.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0051)http://net.pku.edu.cn/~yhf/linux_c/function/08.html -->
<HTML><HEAD><TITLE>Untitled Document</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
<BODY>
<TABLE width="100%">
<TBODY>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc125></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>crypt(將密碼或數據編碼) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>getpass<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#define
_XOPEN_SOURCE<BR>#include<unistd.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>char * crypt (const char *key,const char *
salt);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數說明 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>crypt()將使用Data Encryption
Standard(DES)演算法將參數key所指的字符串加以編碼,key字符串長度僅取前8個字符,超過此長度的字符沒有意義。參數salt為兩個字符組成的字符串,由a-z、A-Z、0-9,“.”和“/”所組成,用來決定使用4096
種不同內建表格的哪一個。函數執行成功后會返回指向編碼過的字符串指針,參數key 所指的字符串不會有所更動。編碼過的字符串長度為13
個字符,前兩個字符為參數salt代表的字符串。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>返回一個指向以NULL結尾的密碼字符串。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>附加說明 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>使用GCC編譯時需加-lcrypt。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<unistd.h><BR>main()<BR>{<BR>char
passwd[13];<BR>char *key;<BR>char slat[2];<BR>key= getpass(“Input First
Password:”);<BR>slat[0]=key[0];<BR>slat[1]=key[1];<BR>strcpy(passwd,crypt(key
slat));<BR>key=getpass(“Input Second
Password:”);<BR>slat[0]=passwd[0];<BR>slat[1]=passwd[1];<BR>printf(“After
crypt(),1st passwd :%s\n”,passwd);<BR>printf(“After crypt(),2nd passwd:%s
\n”,crypt(key slat));<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>執行 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>Input First Password: /* 輸入test,編碼后存于passwd[ ]
*/<BR>Input Second Password /*輸入test,密碼相同編碼后也會相同*/<BR>After crypt () 1st
Passwd : teH0wLIpW0gyQ<BR>After crypt () 2nd Passwd :
teH0wLIpW0gyQ<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc126></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>bsearch(二元搜索) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>qsort<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<stdlib.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>void *bsearch(const void *key,const void
*base,size_t nmemb,size_tsize,int (*compar) (const void*,const
void*));<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>bsearch()利用二元搜索從排序好的數組中查找數據。參數key指向欲查找的關鍵數據,參數base指向要被搜索的數組開頭地址,參數nmemb
代表數組中的元素數量,每一元素的大小則由參數size決定,最后一項參數compar
為一函數指針,這個函數用來判斷兩個元素之間的大小關系,若傳給compar 的第一個參數所指的元素數據大于第二個參數所指的元素數據則必須回傳大于0
的值,兩個元素數據相等則回傳0。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>附加說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>找到關鍵數據則返回找到的地址,如果在數組中找不到關鍵數據則返回NULL。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>#include<stdio.h><BR>#include<stdlib.h><BR>#define
NMEMB 5<BR>#define SIZE 10<BR>int compar(const void *a,const void
*b)<BR>{<BR>return (strcmp((char *)a,(char
*)b));<BR>}<BR>main()<BR>{<BR>char
data[50][size]={“linux”,”freebsd”,”solaris”,”sunos”,”windows”};<BR>char
key[80],*base ,*offset;<BR>int i,
nmemb=NMEMB,size=SIZE;<BR>while(1){<BR>printf(“>”);<BR>fgets(key,sizeof(key),stdin);<BR>key[strlen(key)-1]=’\0’;<BR>if(!strcmp(key,”exit”))break;<BR>if(!strcmp(key,”list”)){<BR>for(i=0;i<nmemb;i++)<BR>printf(“%s\n”,data[i]);<BR>continue;<BR>}<BR>base
= data[0];<BR>qsort(base,nmemb,size,compar);<BR>offset = (char *)
bsearch(key,base,nmemb,size,compar);<BR>if( offset = =NULL){<BR>printf(“%s
not found!\n”,key);<BR>strcpy(data[nmemb++],key);<BR>printf(“Add %s to
data array\n”,key);<BR>}else{<BR>printf(“found: %s
\n”,offset);<BR>}<BR>}<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>執行 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>>hello /*輸入hello字符串*/<BR>hello not found!
/*找不到hello 字符串*/<BR>add hello to data array /*將hello字符串加入*/<BR>>.list
/*列出所有數據*/<BR>freebsd<BR>linux<BR>solaris<BR>sunos<BR>windows<BR>hello<BR>>hello<BR>found:
hello<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc127></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>lfind(線性搜索) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>lsearch<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<stdlib.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>void *lfind (const void *key,const void
*base,size_t *nmemb,size_t<BR>size,int(* compar) (const void * ,const void
*));<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>lfind()利用線性搜索在數組中從頭至尾一項項查找數據。參數key指向欲查找的關鍵數據,參數base指向要被搜索的數組開頭地址,參數nmemb代表數組中的元素數量,每一元素的大小則由參數size決定,最后一項參數compar為一函數指針,這個函數用來判斷兩個元素是否相同,若傳給compar
的異地個參數所指的元素數據和第二個參數所指的元素數據相同時則返回0,兩個元素數據不相同則返回非0值。Lfind()與lsearch()不同點在于,當找不到關鍵數據時lfind()僅會返回NULL,而不會主動把該筆數據加入數組尾端。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>找到關鍵數據則返回找到的該筆元素的地址,如果在數組中找不到關鍵數據則返回空指針(NULL)。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>參考lsearch()。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc128></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>lsearch(線性搜索) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>lfind<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<stdlib.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數 </FONT></DIV></TD>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -