1. linux伺服器上部署java項目,本地windos通過瀏覽器訪問項目怎麼下載項目目錄下的文件到本
既然使用了java,實現這種功能就與OS無關了,否則叫什麼跨平台。其實用瀏覽器下載伺服器端文件比較容易:
首先,要讓用戶能找到並選擇文件(jsp里實現,部分代碼)
String realPath=request.getSession().getServletContext().getRealPath("")+"/documents";//項目根目錄下文件路徑
File fileDir=new File(realPath);
String[] fileList=fileDir.list();//返回目錄下文件名稱數組
for(int i=0;i<fileList.length;i++){
//這里遍歷出來要顯示的文件名,加到td里,後面再加上個「下載」按鈕
//使用隱藏input記錄文件名和路徑fileName,filePath
}
其次,提交下載請求並下載
使用form提交用戶選擇的文件名,Action中部分代碼:
String fileName=req.getParameter("fileName");//HttpServletRequest req
String filePath=req.getParameter("filePath");
try {
FileDownload.Download(filePath+"/"+fileName, "attachment", res);
} catch (Exception e) {
e.printStackTrace();
}
下面是 FileDownload類:
package com.aerolink.aocs.util.fileUtil;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
/**
* <p>
* Title: FileDownload類
* </p>
* <p>
* Description: 實現文件下載功能
* </p>
* <p>
* 將文件名,HttpServletRequest,HttpServletRespons傳給靜態方法Download即可
* </p>
* <p>
* Copyright: Copyright (c) 2005
* </p>
* <p>
* Company: 北京天航信達信息技術有限公司
* </p>
*
* @author 陶源
* @version 2.0
*/
public class FileDownload {
/**
* @param fileName
* @param res
* @throws FileNotFoundException
* @throws IOException
*/
public static void Download(String fileName,
HttpServletResponse res)
throws FileNotFoundException, IOException {
String fileContentType = "application/octet-stream";
String fileDownloadType = "attachment";
long totalsize = 0;
// 取得要傳輸的文件,實際應用是可以將文件路徑以參數的形式傳入
File f = new File(fileName);
// 取文件長度
long filelength = f.length();
byte[] b = new byte[1024];
// 設置文件輸出流
FileInputStream fin = new FileInputStream(f);
DataInputStream in = new DataInputStream(fin);
int pos = fileName.lastIndexOf(java.io.File.separator);
String fn = new String(fileName.substring(pos + 1).getBytes("gb2312"),
"ISO8859-1");
// 設置相應頭信息,讓下載的文件顯示保存信息
res.setContentType(fileContentType);
res.setHeader("Content-Disposition", fileDownloadType + ";filename=\""
+ fn + "\"");
// 確定長度
String filesize = Long.toString(filelength);
// 設置輸出文件的長度
res.setHeader("Content-Length", filesize);
// 取得輸出流
ServletOutputStream servletOut = res.getOutputStream();
// 發送文件數據,每次1024位元組,最後一次單獨計算
while (totalsize < filelength) {
totalsize += 1024;
if (totalsize > filelength) {
// 最後一次傳送的位元組數
byte[] leftpart = new byte[1024 - (int) (totalsize - filelength)];
// 讀入位元組數組
in.readFully(leftpart);
// 寫入輸出流
servletOut.write(leftpart);
} else {
// 讀入1024個位元組到位元組數組 b
in.readFully(b);
// 寫和輸出流
servletOut.write(b);
}
}
servletOut.close();
}
/**
* @param fileName
* @param fileDownloadType
* @param res
* @throws FileNotFoundException
* @throws IOException
*/
public static void Download(String fileName, String fileDownloadType,
HttpServletResponse res)
throws FileNotFoundException, IOException {
String fileContentType = null;
if (fileName.endsWith(".doc")) {
fileContentType = "application/msword";
} else if (fileName.endsWith(".pdf")) {
fileContentType = "application/pdf";
} else if (fileName.endsWith(".xls")) {
fileContentType = "application/vnd-ms-excel";
} else if (fileName.endsWith(".txt")) {
fileContentType = "text/plain";
} else {
fileContentType = "application/octet-stream";
}
long totalsize = 0;
// 取得要傳輸的文件,實際應用是可以將文件路徑以參數的形式傳入
File f = new File(fileName);
// 取文件長度
long filelength = f.length();
byte[] b = new byte[1024];
// 設置文件輸出流
FileInputStream fin = new FileInputStream(f);
DataInputStream in = new DataInputStream(fin);
int pos = fileName.lastIndexOf(java.io.File.separator);
String fn = new String(fileName.substring(pos + 1).getBytes("gb2312"),
"ISO8859-1");
// 設置相應頭信息,讓下載的文件顯示保存信息
res.setContentType(fileContentType);
res.setHeader("Content-Disposition", fileDownloadType + ";filename=\""
+ fn + "\"");
// 確定長度
String filesize = Long.toString(filelength);
// 設置輸出文件的長度
res.setHeader("Content-Length", filesize);
// 取得輸出流
ServletOutputStream servletOut = res.getOutputStream();
// 發送文件數據,每次1024位元組,最後一次單獨計算
while (totalsize < filelength) {
totalsize += 1024;
if (totalsize > filelength) {
// 最後一次傳送的位元組數
byte[] leftpart = new byte[1024 - (int) (totalsize - filelength)];
// 讀入位元組數組
in.readFully(leftpart);
// 寫入輸出流
servletOut.write(leftpart);
} else {
// 讀入1024個位元組到位元組數組 b
in.readFully(b);
// 寫和輸出流
servletOut.write(b);
}
}
servletOut.close();
}
}
2. linux c 查看當前目錄下是否有指定文件
1. Shell 版本
#獲取當前腳本所在絕對路徑
cur_dir=$(cd "$(dirname "$0")"; pwd)
2. C語言版本
方法一、用realpath函數。這種方法用於開機啟動程序獲取自身目錄會出錯
char current_absolute_path[MAX_SIZE];
//獲取當前目錄絕對路徑
if (NULL == realpath("./", current_absolute_path))
{
printf("***Error***\n");
exit(-1);
}
strcat(current_absolute_path, "/");
printf("current absolute path:%s\n", current_absolute_path);
方法二、用getcwd函數。這種方法用於開機啟動程序獲取自身目錄會出錯
char current_absolute_path[MAX_SIZE];
//獲取當前目錄絕對路徑
if (NULL == getcwd(current_absolute_path, MAX_SIZE))
{
printf("***Error***\n");
exit(-1);
}
printf("current absolute path:%s\n", current_absolute_path);
方法三、用readlink函數。這種方法最可靠,可用於開機啟動程序獲取自身目錄
char current_absolute_path[MAX_SIZE];
//獲取當前程序絕對路徑
int cnt = readlink("/proc/self/exe", current_absolute_path, MAX_SIZE);
if (cnt < 0 || cnt >= MAX_SIZE)
{
printf("***Error***\n");
exit(-1);
}
//獲取當前目錄絕對路徑,即去掉程序名
int i;
for (i = cnt; i >=0; --i)
{
if (current_absolute_path[i] == '/')
{
current_absolute_path[i+1] = '\0';
break;
}
}
printf("current absolute path:%s\n", current_absolute_path);
3. linux 中把一個文件夾下的文件復制到同目錄下不同的文件夾下
#!/bin/bash
read-p'請輸入要復制的路徑(此路徑下的所有文件會被復制):'from
read-p'請輸入要復制到的路徑(源路徑下的所有文件都會在此路徑下所有子文件夾中被復制一份):'target
dirs=`ls$target-F|grep"/$"`#找同級文件夾
#dirs=`find$target-typed-path$from-prune-o-path$target-prune-o-print`
#dirs=`find$target-typed`#找所有子文件夾
fordirin$dirs
do
if["`realpath$target/$dir`"!="`realpath$from`"]&&["`realpath$target/$dir`"!="`realpath$target`"];
then
cp-r$from/*$target/$dir
#cp-r$from/*$dir/
fi
done
4. php列出目錄下所有文件(包括子目錄)
<?php
/**
*Goofy2011-11-30
*getDir()去文件夾列表,getFile()去對應文件夾下面的文件列表,二者的區別在於判斷有沒有「.」後綴的文件,其他都一樣
*/
//獲取文件目錄列表,該方法返回數組
functiongetDir($dir){
$dirArray[]=NULL;
if(false!=($handle=opendir($dir))){
$i=0;
while(false!==($file=readdir($handle))){
//去掉"「.」、「..」以及帶「.xxx」後綴的文件
if($file!="."&&$file!=".."&&!strpos($file,".")){
$dirArray[$i]=$file;
$i++;
}
}
//關閉句柄
closedir($handle);
}
return$dirArray;
}
//獲取文件列表
functiongetFile($dir){
$fileArray[]=NULL;
if(false!=($handle=opendir($dir))){
$i=0;
while(false!==($file=readdir($handle))){
//去掉"「.」、「..」以及帶「.xxx」後綴的文件
if($file!="."&&$file!=".."&&strpos($file,".")){
$fileArray[$i]="./imageroot/current/".$file;
if($i==100){
break;
}
$i++;
}
}
//關閉句柄
closedir($handle);
}
return$fileArray;
}
//調用方法getDir("./dir")……
?>
5. 如何編譯可以在Windows下運行的帶有python支持的ARM Linux GDB
做這件事情的目的是為了在QtCreator里調試ARM Linux程序的時候,能看清楚QString、QList這些Qt特有的對象的內容,而不是一個完全看不懂的結構體。
目前(2014年8月)Linaro、CodeSourcery的GCC工具鏈里的GDB都不支持Python。想知道你用的GDB支持不支持,試一試就行,這樣表示不支持:
(gdb) python
>print 'Hello GDB!'
>(按Ctrl+D)Python scripting is not supported in this of GDB.
這樣表示支持:
(gdb) python
>print 'Hello GDB!'
>(按Ctrl+D)Hello GDB!
這件事情乍一看也很簡單,只要把GDB源碼下載下來,然後再配置,打開Python支持就行了。實際上會遇到的問題是,在MinGW下,又要與「\」和「:」這兩個Windows路徑里的刺頭斗爭了。我覺得我之前挺傻,編譯MinGW下Qt的時候,就去硬磕源碼和configure腳本去了。這次GDB的configure是自動生成的,不是給人看的,configure.ac看起來也很費勁,根本磕不下去,於是我換了個思路,在ubuntu下交叉編譯吧,sudo apt-get install mingw32,這是Ubuntu下的MinGW交叉編譯器。
然後是依賴,這樣的GDB要依賴expat和python的開發版本。如果是ubuntu底下直接編譯,apt-cache search一下他們的開發版本,然後sudo apt-get install一下就好了;給MinGW交叉編譯就麻煩了。先說expat,這個好辦,把http://downloads.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz下載下來,然後:
./configure --prefix=[安裝目錄,如/home/c/mingw-gdb/expat] --host=i586-mingw32msvc
make
make install
會提示一些警告,無視即可。
Python就無語了,目前的GDB貌似最高支持Python 2.7,而2.7版本的Python本身不支持MinGW…… 好在有高手做了Patch,也寫了說明,可以參考這文章:http://mdqinc.com/blog/2011/10/cross-compiling-python-for-windows-with-mingw32/
但是,就算這樣,編譯也充滿挑戰,要修復很多問題,出來的Python還少「nt」模塊。就在我覺得沒辦法的時候,突然發現Windows版Qt提供的MinGW居然內置了Python開發包,位置在Tools/mingw48_32/opt,趕緊把它拷貝到Linux下,比如/home/c/mingw-gdb/python。當然,你也必須確保ubuntu下有可用的python。
然後,給GDB打一個補丁:
--- gdb-7.8/gdb/configure 2014-07-29 20:37:42.000000000 +0800
+++ gdb-7.8-old/gdb/configure 2014-08-30 00:08:27.122042706 +0800
@@ -8263,21 +8263,22 @@
# We have a python program to use, but it may be too old.
# Don't flag an error for --with-python=auto (the default).
have_python_config=yes
- python_includes=`${python_prog} ${srcdir}/python/python-config.py --includes`
+ python_config_tool=`echo ${python_prog} | sed "s#python.exe#python-config#g"`
+ python_includes=`${python_config_tool} --includes`
if test $? != 0; then
have_python_config=failed
if test "${with_python}" != auto; then
as_fn_error "failure running python-config --includes" "$LINENO" 5
fi
fi
- python_libs=`${python_prog} ${srcdir}/python/python-config.py --ldflags`
+ python_libs=`${python_config_tool} --ldflags`
if test $? != 0; then
have_python_config=failed
if test "${with_python}" != auto; then
as_fn_error "failure running python-config --ldflags" "$LINENO" 5
fi
fi
- python_prefix=`${python_prog} ${srcdir}/python/python-config.py --exec-prefix`
+ python_prefix=`${python_config_tool} --exec-prefix`
if test $? != 0; then
have_python_config=failed
if test "${with_python}" != auto; then
@@ -8343,12 +8344,12 @@
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+#if ac_fn_c_try_link "$LINENO"; then :
have_libpython=${version}
found_usable_python=yes
PYTHON_CPPFLAGS=$new_CPPFLAGS
PYTHON_LIBS=$new_LIBS
-fi
+#fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CPPFLAGS=$save_CPPFLAGS
這個補丁的目的是強制為檢測到python。
然後給拷貝到Linux下的python開發包打一個補丁:
--- python-old/bin/python-config 2013-04-18 02:43:01.000000000 +0800
+++ python/bin/python-config 2014-08-30 00:53:16.630060288 +0800
@@ -1,4 +1,4 @@
-#!/temp/x32-480-posix-dwarf-r2/mingw32/opt/bin/python2.7.exe
+#!/usr/bin/python
import sys
import os
@@ -31,26 +31,23 @@
for opt in opt_flags:
if opt == '--prefix':
- print sysconfig.PREFIX
+ print '../python'
elif opt == '--exec-prefix':
- print sysconfig.EXEC_PREFIX
+ print '../python'
elif opt in ('--includes', '--cflags'):
- flags = ['-I' + sysconfig.get_python_inc(),
- '-I' + sysconfig.get_python_inc(plat_specific=True)]
+ flags = ['-I' + os.path.split(os.path.realpath(__file__))[0] + '/../include/python2.7']
if opt == '--cflags':
- flags.extend(getvar('CFLAGS').split())
+ flags += ['-fno-strict-aliasing -DMS_WIN32 -DMS_WINDOWS -DHAVE_USABLE_WCHAR_T -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes']
print ' '.join(flags)
elif opt in ('--libs', '--ldflags'):
- libs = getvar('LIBS').split() + getvar('SYSLIBS').split()
- libs.append('-lpython'+pyver)
+ libs = ['-lm -lpython2.7 -Wl,--out-implib=libpython2.7.dll.a']
# add the prefix/lib/pythonX.Y/config dir, but only if there is no
# shared library in prefix/lib/.
if opt == '--ldflags':
if not getvar('Py_ENABLE_SHARED'):
- libs.insert(0, '-L' + getvar('LIBPL'))
- libs.extend(getvar('LINKFORSHARED').split())
+ libs.insert(0, '-L' + os.path.split(os.path.realpath(__file__))[0] + '/../lib/python2.7/config')
print ' '.join(libs)
因為Linux下是無法運行開發包中的python.exe的,所以這個補丁借用了ubuntu的python。裡面的cflags和ldflags都是在Windows底下運行原始python-config獲得的。prefix和exec-prefix設成「../python」,可以在編譯完以後,把python開發包拷貝到gdb安裝目錄裡面的python子目錄,這樣運行GDB的時候就不需要設定PYTHONHOME環境變數了。
最後一個事情,確保你的Linux下有arm交叉編譯器,我的是arm-linux-gnueabihf,是啥target就寫啥。
准備工作做完了,開始配置和編譯:
./configure --with-expat --host=i586-mingw32msvc --target=arm-linux-gnueabihf --with-libexpat-prefix=[expat安裝位置] --with-python=[python開發包安裝位置/bin/python.exe]
make
make DESTDIR=[GDB安裝位置] install
然後把GDB安裝位置下面的所有文件拷貝到Windows下,再把python開發包拷貝到同目錄下的python子目錄,大功告成。
如果提示沒找到libpython2.7.dll,那就把GDB安裝目錄的python/bin下的拷貝到bin下。
如果發現生成的exe文件太大了,那就strip一下。
2015年9月12日追加:
在windows下調試時,一般會提示說載入不了共享庫,讓你用"set sysroot"或"set solib-search-path"之類設定路徑的。這個問題可以通過.gdbinit文件,用上面這兩條命令來設定路徑解決,如果想一勞永逸,可以在編譯的時候加上host_configargs環境變數來解決這個問題:
host_configargs=--with-sysroot=E:\MinGW\opt\sysroot-arm ./configure ...
或者
export host_configargs=--with-sysroot=E:\MinGW\opt\sysroot-arm
./configure ...
後面的路徑是放在windows下的sysroot的位置。
6. Linux C函數實例速查手冊的目錄
第1章 初級I/O函數
1.1 close函數:關閉已經打開的文件
1.2 creat函數:創建一個文件
1.3 p函數:復制文件描述符
1.4 p2函數:復制文件描述符到指定的位置
1.5 fcntl函數:改變文件的狀態
1.6 fsync函數:將緩沖區數據回寫到磁碟文件
1.7 Lseek函數:移動文件的讀寫位置
1.8 open函數:打開一個文件
1.9 read函數:讀取文件的數據
1.10 sync函數:將所有打開的文件寫回磁碟
1.11 write函數:輸出內容到文件
第2章 文件管理操作函數
2.1 access函數:判斷進程是否具有訪問文件的許可權
2.2 alphasort函數:按照字母順序排序目錄結構
2.3 chdir函數:改變當前的工作目錄
2.4 chmod函數:改變文件的許可權
2.5 chown函數:改變文件的所有者
2.6 chroot函數:改變進程的根目錄
2.7 closedir函數:關閉目錄文件
2.8 fchdir函數:使用文件描述符改變當前的工作目錄
2.9 fchmod函數:改變一個已經打開的文件的許可權
2.10 fstat函數:得到一個打開文件的狀態
2.11 truncate函數:改變一個打開文件的大小
2.12 ftw函數:遍歷目錄樹
2.13 get_current_dir_name函數:取得當前的工作目錄
2.14 getcwd函數:取得進程的當前工作目錄
2.15 lchown函數:改變符號鏈接文件的擁有者
2.16 link函數:建立一個硬鏈接
2.17 lstat函數:得到符號鏈接的文件狀態
2.18 nftw函數:遍歷目錄樹
2.19 opendir函數:打開目錄文件
2.20 readdir函數:讀取目錄文件的內容
2.21 readlink函數:讀取符號鏈接文件本身的內容
2.22 realpath函數:將相對目錄路徑轉換成絕對路徑
2.23 remove函數:刪除文件或者目錄
2.24 rename函數:更改文件的名稱或位置
2.25 rewinddir函數:回卷目錄文件
2.26 seekdir函數:文件定位函數
2.27 stat函數:取得文件狀態
2.28 symlink函數:創建一個符號鏈接
2.29 telldir函數:取得目錄文件的讀取位置
2.30 truncate函數:改變文件大小
2.31 umask:設置創建文件時使用的許可權掩碼
2.32 unlink函數:刪除文件的一個硬鏈接
第3章 標准I/O函數
3.1 clearerr函數:清除錯誤標志
3.2 fclose函數:關閉流文件描述符
3.3 fdopen函數:轉換文件描述符到文件指針
3.4 feof函數:文件結束判斷函數
3.5 fflush函數:刷新流文件讀寫緩存
3.6 fgetc函數:從流文件中讀取一個字元
3.7 fgetpos函數:返迴流文件當前讀寫位置
3.8 fgets函數:從流文件中讀出一行數據
3.9 fileno函數:獲得流文件的文件描述符
3.10 fopen函數:打開文件
3.11 fputc函數:將字元寫入流文件
3.12 fputs函數:將字元串寫入流文件
3.13 fread函數:從流文件中讀出數據
3.14 freopen函數:打開文件
3.15 fseek函數:移動流文件的讀寫位置
3.16 fsetpos函數:設置流文件當前讀寫位置
3.17 ftell函數:得到流文件的讀取位置
3.18 fwrite函數:向流文件中寫入數據
3.19 getc函數:從文件中讀出一個字元
3.20 getchar函數:從標准輸入中讀入一個字元
3.21 gets函數:從標准輸入中讀入一行數據
3.22 mktemp函數:產生臨時文件的文件名
3.23 putc函數:將字元寫入文件
3.24 putchar函數:將字元輸出到標准輸出中
3.25 puts函數:將字元串輸出在標准輸出中
3.26 rewind函數:將流文件的讀寫位置移動到文件的起始位置
3.27 setbuf函數:設置文件緩沖區
3.28 setbuffer函數:設置文件緩沖區
3.29 setlinebuf函數:設置行緩沖模式
3.30 setvbuf函數:設置自定義文件緩沖區
3.31 tmpfile函數:建立臨時的二進制文件
3.32 ungetc函數:將字元寫迴文件
第4章 格式化輸入輸出函數
4.1 fprintf函數:格式化輸出到文件
4.2 fscanf函數:格式化從文件中讀出數據
4.3 printf函數:格式化輸出
4.4 scanf函數:格式化輸入
4.5 snprintf函數:格式化字元輸入
4.6 sprintf函數:格式化字元串列印
4.7 sscanf函數:格式化字元串取值
4.8 vfprintf函數:可變參數輸出函數
4.9 vfscanf函數:格式化輸入
4.10 vprintf函數:格式化輸出函數
4.11 vscanf函數:格式化輸入函數
4.12 vsnprintf函數:格式化字元串復制
4.13 vsprintf函數:格式化字元串復制
4.14 vsscanf函數:格式化字元輸入
第5章 進程式控制制
5.1 abort函數:進程異常終止函數
5.2 atexit函數:進程終止處理函數
5.3 execl函數:執行文件函數
5.4 execle函數:執行文件的函數
5.5 execlp函數:從PATH環境變數中查找文件並執行
5.6 execv函數:執行文件
5.7 execve函數:執行文件
5.8 execvp函數:執行文件
5.9 exit函數:結束進程運行的函數
5.10 _exit函數:結束進程運行的函數
5.11 fork函數:建立一個新的進程
5.12 getgid函數:取得實際進程組ID
5.13 getegid函數:取得有效進程組ID
5.14 getpid函數:取得有效組ID
5.15 getppid函數:取得父進程的進程識別碼
5.16 getpriority函數:取得進程執行優先順序
5.17 longjmp函數:跳到原先setjmp存儲的堆棧環境
5.18 on_exit函數:設置程序正常結束前調用的函數
5.19 setjmp函數:存儲當前堆棧環境
5.20 setgid函數:設置進程的進程組ID
5.21 setuid函數:設置進程組ID
5.22 setpriority函數:設置程序進程優先順序
5.23 siglongjmp函數:跳到原先sigset jmp存儲的堆棧環境
5.24 sigsetjmp函數:存儲當前堆棧環境和屏蔽的信號集
5.25 system函數:執行Shell命令
5.26 vfork函數:建立一個新的進程
5.27 wait函數:等待子進程中斷或結束
5.28 waitpid函數:等待子進程中斷或結束
5.29 wait3函數:等待進程結束並且輸出子進程統計信息
第6章 進程間通信函數
6.1 ftok函數:獲得項目相關的IPC鍵值
6.2 msgctl函數:消息隊列操作函數
6.3 msgget函數:創建或打開消息隊列
6.4 msgrcv函數:讀取消息隊列
6.5 msgsnd函數:向消息隊列中寫入消息
6.6 semctl函數:信號量操作函數
6.7 semget函數:創建或打開信號量
6.8 semop函數:釋放或獲取信號量
6.9 shmat函數:導入共享內存
6.10 shmctl函數:共享內存操作函數
6.11 shmdt函數:將共享內存從程序中脫離
6.12 shmget函數:創建共享內存
6.13 mkfifo函數:創建fifo管道函數
6.14 pclose函數:關閉管道文件
6.15 pipe函數:創建匿名管道
6.16 popen函數:創建管道文件
第7章 信號函數
7.1 alarm函數:內核定時器函數
7.2 kill函數:信號發送函數
7.3 pause函數:進程暫停執行函數
7.4 raise函數:向進程自身發送信號函數
7.5 sigaction函數:高級信號處理方式設置函數
7.6 sigaddset函數:添加信號到信號集函數
7.7 sigdelset函數:刪除信號集中對應信號函數
7.8 sigemptyset函數:清空信號集函數
7.9 sigfillset函數:填充信號集函數
7.10 sigismember函數:測試某個信號是否在信號集中
7.11 signal函數:信號處理方式設置函數
7.12 sigpause函數:暫停進程直到信號到來
7.13 sigpending函數:查詢未決信號
7.14 sigprocmask函數:信號屏蔽函數
7.15 sigsuspend函數:暫停直到信號到來
7.16 sleep函數:讓進程休眠一段時間
第8章 用戶、組函數及環境變數函數
8.1 clearenv函數:刪除所有環境變數的值
8.2 cuserid函數:獲得用戶名函數
8.3 endgrent函數:關閉系統組文件函數
8.4 endpwent函數:關閉系統口令函數
8.5 entent函數:關閉utmp文件
8.6 fgetgrent函數:從文件中讀取組數據
8.7 fgetpwent函數:從文件中讀取密碼格式數據
8.8 getegid函數:獲得有效(effective gid)組識別符
8.9 getenv函數:取得環境變數的值
8.10 geteuid函數:獲得有效(effective uid)用戶識別符
8.11 getgid函數:獲得組識別符
8.12 getgrent函數:從文件/etc/group中讀取組信息
8.13 getgrgid函數:從文件/etc/group中查找組信息
8.14 getgrnam函數:從文件/etc/group中查找組信息
8.15 getgroups函數:返回當前用戶所屬的組列表
8.16 getlogin函數:獲取當前用戶的賬號名稱
8.17 getpw函數:獲取指定uid的用戶信息
8.18 getpwent函數:讀取/etc/passwd文件中的數據
8.19 getpwnam函數:以用戶名獲取用戶信息
8.20 getpwuid函數:以用戶ID獲取用戶信息
8.21 getuid函數:獲取當前進程所屬的用戶ID
8.22 getutent函數:獲取登錄信息
8.23 getutid函數:獲取指定用戶ID的登錄信息
8.24 getutline函數:查找指定的登錄信息
8.25 initgroups函數:初始化組信息
8.26 logwtmp函數:添加登錄記錄信息
8.27 putenv函數:改變環境變數的值
8.28 pututline函數:添加登錄信息
8.29 setegid函數:設置有效組ID
8.30 setenv函數:改變環境變數的值
8.31 seteuid函數:設置有效用戶ID
8.32 setfsgid函數:設置進程的文件系統的組ID
8.33 setfsuid函數:設置進程的文件系統的用戶ID
8.34 setgid函數:設置進程的組ID
8.35 setgrent函數:將文件etc/group的讀寫位置移動到起始位置
8.36 setgroups函數:設置當前進程的組識別符
8.37 setpwent函數:將文件etc/passwd的讀寫位置移動到起始位置
8.38 setregid函數:設置當前進程的真實以及有效組ID
8.39 setreuid函數:設置當前進程的真實以及有效用戶ID
8.40 setuid函數:設置進程的用戶ID
8.41 setutent函數:將文件utmp的讀寫位置移動到起始位置
8.42 unsetenv函數:清除環境變數的值
8.43 updwtmp函數:將登錄數據記錄寫入utmp文件
8.44 utmpname函數:設置文件utmp的絕對位置
第9章 錯誤處理與內存分配函數
9.1 brk函數:改變數據段大小
9.2 calloc函數:內存分配函數
9.3 ferror函數:文件錯誤判斷
9.4 free函數:釋放動態分配內存函數
9.5 getpagesize函數:獲得操作系統內存頁大小函數
9.6 malloc函數:動態內存分配函數
9.7 mmap函數:文件映射函數
9.8 munmap函數:釋放映射的內存地址
9.9 perror函數:錯誤原因輸出函數
9.10 realloc函數:內存截取函數
9.11 sbrk函數:增加數據空間
9.12 strerror函數:錯誤代碼查詢
第10章 日誌函數、動態函數與正則表達式函數
10.1 closelog函數:關閉信息記錄
10.2 dlclose函數:關閉動態庫文件
10.3 dlerror函數:動態函數出錯處理
10.4 dlopen函數:打開動態庫文件
10.5 dlsym函數:在動態庫文件中查找函數
10.6 openlog函數:打開記錄信息
10.7 regcomp函數:編譯正則表達式
10.8 regerror函數:編譯錯誤判斷函數
10.9 regexec函數:執行正則匹配
10.10 regfree函數:釋放正則模式串資源
10.11 syslog函數:輸出記錄信息
第11章 時間函數
11.1 asctime函數:字元串時間操作函數
11.2 clock函數:計算運行時間函數
11.3 ctime函數:字元串時間函數
11.4 difftime函數:計算時間差函數
11.5 ftime函數:取得系統時間
11.6 gettimeofday函數:取得系統當前時間
11.7 gmtime函數:日歷時間格式函數
11.8 localtime函數:獲得當前系統時間
11.9 mktime函數:系統時間轉換函數
11.10 settimeofday函數:系統時間設置函數
11.11 strftime函數:時間格式化輸出函數
11.12 time函數:獲得系統當前時間
11.13 tzset函數:設置系統時區變數tzname
第12章 socket相關函數
12.1 accept函數:處理socket請求函數
12.2 bind函數:將socket描述符與一個套介面綁定
12.3 connect函數:與遠程主機連接
12.4 endprotoent函數:結束網路協議的讀取函數
12.5 endservent函數:關閉文件/etc/services
12.6 gethostbyaddr函數:由IP獲得主機信息
12.7 gethostbyname函數:由主機名獲得主機信息
12.8 getprotobyname函數:由協議名獲取協議數據
12.9 getprotobynumber函數:由協議編號獲取協議數據
12.10 getprotoent函數:讀取文件/etc/rotoent中的網路協議數據
12.11 getservbyname函數:獲得網路服務協議數據
12.12 getservbyport函數:獲得網路服務協議數據
12.13 getservent函數:讀取主機網路服務數據
12.14 getsockopt函數:獲得指定socket描述符的狀態
12.15 herror函數:錯誤原因輸出函數
12.16 hstrerror函數:錯誤代碼查詢
12.17 htonl函數:地址位元組順序轉換
12.18 htons函數:地址位元組順序轉換
12.19 inet_addr函數:網路地址類型轉換
12.20 inet_aton函數:網路地址類型轉換
12.21 inet_ntoa函數:網路地址類型轉換
12.22 listen函數:網路socket監聽
12.23 ntohl函數:地址位元組順序轉換
12.24 ntohs函數:地址位元組順序轉換
12.25 recv函數:接收消息
12.26 recvfrom函數:接收消息
12.27 recvmsg函數:多緩沖讀取數據
12.28 send函數:向遠程主機發送數據
12.29 sendto函數:發送數據到遠程主機
12.30 setprotoent函數:打開網路協議文件
12.31 setservent函數:打開網路服務文件
12.32 setsockopt函數:設置socket描述符的狀態
12.33 shutdown函數:結束socket套接字
12.34 socket函數:創建網路套接字
第13章 字元測試函數
13.1 isalnum函數:判斷字元是否為英文字母或數字
13.2 isalpha函數:判斷字元是否為英文字母
13.3 isascii函數:判斷字元是否為ASCII字元
13.4 isblank函數:判斷字元是否為空白字元
13.5 iscntrl函數:判斷字元是否為ASCII的控制字元
13.6 isdigit函數:判斷字元是否為阿拉伯數字
13.7 isgraph函數:判斷字元是否為可列印字元
13.8 islower函數:判斷字元是否為小寫英文字母
13.9 isprint函數:判斷字元是否為可列印字元
13.10 isspace函數:判斷字元是否為空格字元
13.11 ispunct函數:判斷字元是否為標點符號
13.12 isupper函數:判斷字元是否為大寫英文字母
13.13 isxdigit函數:判斷字元是否為十六進制數字
第14章 數據轉換函數
14.1 atof函數:將字元串轉換成浮點數
14.2 atoi函數:將字元串轉換成整數
14.3 atol函數:將字元串轉換成長整數
14.4 ecvt函數:將浮點數轉換成字元串
14.5 fcvt函數:將浮點數轉換成字元串
14.6 gcvt函數:將浮點數轉換成字元串
14.7 strtod函數:將字元串轉換成浮點數
14.8 strtol函數:將字元串轉換成長整數
14.9 strtoul函數:將字元串轉換成無符號長整數
14.10 toascii函數:將整數轉換成合法的ASCII字元
14.11 tolower函數:將大寫字母轉換成小寫字母
14.12 toupper函數:將小寫字母轉換成大寫字母
第15章 字元串處理函數
15.1 bcmp函數:比較兩塊內存中的內容
15.2 b函數:復制內存中的內容
15.3 bzero函數:將一塊內存內容全清零
15.4 ffs函數:在一個整數中查找第一個值為真的位
15.5 index函數:查找字元串中第一個出現的指定字元
15.6 memccpy函數:復制內存中的內容
15.7 memchr函數:在一塊內存指定范圍查找一個指定字元
15.8 memcmp函數:比較內存中存放的內容
15.9 memcpy函數:復制一塊內存內容到另一塊中
15.10 memfrob函數:對某個內存區重新編碼
15.11 memmove函數:復制內存內容
15.12 memset函數:將某值填入到一塊內存區域
15.13 rindex函數:查找字元串中最後一個出現的指定字元
15.14 strcasecmp函數:忽略大小寫比較字元串
15.15 strcat函數:將一個字元串連接另一字元串的尾部
15.16 strchr函數:查找字元串中指定字元
15.17 strcmp函數:比較兩個字元串
15.18 strcoll的函數:根據當前環境信息來比較字元串
15.19 strcpy函數:復制一個字元串的內容到另一個字元串中
15.20 strcspn函數:計算字元串中由非指定字元集字元組成的子字元串的長度
15.21 strp函數:復制字元串內容
15.22 strfry函數:隨機重組一個字元串
15.23 strlen函數:返回字元串長度
15.24 strncasecmp函數:忽略大小寫比較兩個字元串
15.25 strncat函數:將一個字元串的前n個字元連接到另一字元串的尾部
15.26 strncmp函數:比較兩個字元串
15.27 strncpy函數:復制字元串
15.28 strpbrk函數:查找字元串中第一個出現的指定字元
15.29 strrchr函數:查找字元串中最後一個出現的指定字元
15.30 strspn函數:計算字元串中由指定字元集字元組成的子字元串的長度
第16章 數學計算函數
16.1 abs函數:計算整數的絕對值
16.2 acos函數:計算反餘弦的值
16.3 asin函數:計算反正弦的值
16.4 atan函數:計算反正切的值
16.5 atan2函數:計算反正切的值
16.6 ceil函數:計算大於或等於給定參數的最小整數
16.7 cos函數:計算餘弦的值
16.8 cosh函數:計算雙曲線的餘弦值
16.9 div函數:計算兩整數相除後的商和余數
16.10 exp函數:計算浮點數的指數
16.11 fabs函數:計算浮點數的絕對值
16.12 frexp函數:計算浮點數的尾數和指數
16.13 hypot函數:計算直角三角形斜邊長度
16.14 labs函數:計算長整數的絕對值
16.15 ldexp函數:計算浮點數與2的exp次方的積
16.16 ldiv函數:計算兩長整數相除後的商和余數
16.17 log函數:計算以e為底的對數值
16.18 log10函數:計算以10為底的對數值
16.19 modf函數:將浮點數分解為小數和整數兩部分
16.20 pow函數:計算次方值
16.21 sin函數:取正弦的值
16.22 sinh函數:計算雙曲線的正弦值
16.23 sqrt函數:計算浮點數的平方根
16.24 tan函數:計算角度的正切值
16.25 tanh函數:計算雙曲線的正切函數值
第17章 隨機數及數據加密函數
17.1 crypt函數:對字元串使用DES演算法編碼
17.2 drand48函數:產生一個正的隨機浮點數
17.3 erand48函數:產生一個正的隨機浮點數
17.4 initstate:建立隨機數狀態數組
17.5 jrand48函數:產生一個長整型的隨機數
17.6 lcong48函數:設置48位運算的隨機數種子
17.7 lrand48函數:產生一個正的長整型隨機數
17.8 mrand48函數:產生一個長整型隨機數
17.9 nrand48函數:產生一個正的長整數隨機數
17.10 rand函數:產生偽隨機數
17.11 random函數:產生隨機數
17.12 seed48函數:設置48位運算的隨機數種子
17.13 setstate函數:建立隨機數狀態數組
17.14 srand函數:設置隨機數種子
17.15 srand48函數:設置48位運算的隨機數種子
17.16 srandom函數:設置隨機數種子
17.17 getpass函數:取得用戶輸入密碼字元串
第18章 數據結構函數
18.1 bsearch函數:在有序數組中二分查找數據
18.2 hcreate函數:建立哈希表
18.3 hdestroy函數:刪除哈希表
18.4 hsearch函數:在哈希表中查找關鍵數據
18.5 lfind函數:線性搜索
18.6 lsearch函數:線性搜索
18.7 qsort函數:使用快速排序法排列數組
18.8 tdelete函數:從二叉樹中刪除數據
18.9 tfind函數:搜索二叉樹
18.10 tsearch函數:搜索二叉樹
18.11 twalk函數:遍歷二叉樹
第19章 其他函數
19.1 getopt函數:分析命令參數
19.2 isatty函數:判斷文件描述符是否為終端
19.3 pselect函數:多路轉接I/O
19.4 select函數:多路I/O轉接
19.5 ttyname函數:返回終端機的名稱
附錄A Linux函數的首字母索引
附錄B Linux指令的首字母索引