導航:首頁 > 操作系統 > linuxc參考手冊

linuxc參考手冊

發布時間:2022-06-20 11:28:39

linux下C編程

gedit a.c
然後 寫就行了!
GCC a.c
編譯
然後
./a.out運行!
就這么簡單!

② 想在LINUX下學習C語言,該如何開始

window,linux C都是一樣的,如果不用系統函數,主要在於環境,工具的使用,windows用vs2010這種,點一個按鈕編譯,linux一般都自己gcc編譯,熟悉linux常用命令,vi,emacs等編輯器,代碼還是 一樣寫,多用幾次就熟悉了。

③ Linux API中文文檔最好是chm的。。。

http://dl.vmall.com/c0uuev9hec
這兒有本PDF的電子書

④ linux C/C++跟Windows下c/c++有何不同如何學習

有幾個方面的不同,列舉如下:
1 開發集成工具不同。在linux下面採用的多是開源的開發工具例如codeblocks、eclipse等,而window下面則多採用vc
2 系統api不同。在linux下面,是沒有臨界區域的,因此同步等操作,需要依靠互斥體。而window下面兩者都有
3 系統環境不一樣。比如文件路徑的格式、環境變數的配置等等
4 編譯環境不一樣。在linux下面主要是依靠gcc編譯,而window下面主要靠微軟提供的編譯器編譯
5 開發目標也有區別。linux下面C/C++主要針對嵌入式和linux伺服器設備,而window下面多是桌面應用和window伺服器。
對於linux下面的C/C++學習主要依靠man手冊,而對window下面的C/C++學習則要參考MSDN
對於兩者,最好都是邊學邊做,才能比較快速的掌握,牢固的掌握

⑤ 怎麼在Redhat linux下搭建C編程環境

要想在Linux下進行C語言編程,首先得搭建好一個編程環境。這里分別說明一下幾個非常有用的軟體包。
如果你對Linux下軟體安裝方法還不清楚,請參考文章「Linux下軟體安裝方法總結」http://zhoulifa.bokee.com/5444771.html
1、gcc
要進行C語言編程,首先得有個C語言的編譯器,Linux下常用的是GNU C Compiler gcc。
gcc軟體是用來提供默認值的。從Depends可以看出要gcc真正工作必須有對應的cpp和gcc版本。
比如cpp-4.1和gcc-4.1、cpp-3.3和gcc-3.4
2、gcc-*
3、cpp
gcc要進行程序編譯,首先需要進行一個預編譯過程。該過程對程序源代碼進行預處理。

4、cpp-*

5、libgcc1
gcc還依賴於libgcc1這個軟體包。libgcc1是用於gcc軟體自身的必須組件。
6、libc6
C語言程序要能夠運行,需要一些運行時庫文件和一些庫文件操作命令。libc6這個軟體包就是用來提供這些的。這個軟體包幾乎是Linux系統自帶的,因為所有C程序的運行都離不開此軟體包。
7、binutils
程序從源代碼到可執行程序的過程中,必然需要一些工具來輔助完成。binutils軟體包就是提供一些工具的
這個軟體包提供下面這些非常有用的命令:
/usr/bin/size # 顯示每個目標文件或歸檔文件的章節大小和總的大小
/usr/bin/objmp # 顯示目標文件的信息
/usr/bin/ar # 歸檔文件管理工具,可以創建、修改或打開一個歸檔文件
/usr/bin/strings # 顯示一個文件中的可列印字元串,比如文本文件的全部或目標文件里的字元串
/usr/bin/ranlib # 產生歸檔文件的索引
/usr/bin/obj # 復制或轉換目標文件
/usr/bin/addr2line # 把一個地址信息轉換為文件名和行號
/usr/bin/readelf # 顯示 ELF 文件信息, ELF 文件格式即 Linux 目前流行的可執行文件格式
/usr/bin/nm # 顯示目標文件里的符號
/usr/bin/strip # 去除目標文件里的符號
/usr/bin/c++filt # 識別 C++ 和 Java 符號
/usr/bin/as # GNU 匯編工具
/usr/bin/gprof #
/usr/bin/ld # GNU 鏈接工具
8、locales
這個軟體包提供本地語言環境支持

雖然上面列了這么多必需的軟體包,但實際上因為他們之間有依賴關系,所以在安裝完系統後我們只需要輸入下面一個命令:
apt-get install gcc
系統就會自動幫忙把這些軟體包安裝上。

9、libc6-dev
我們要進行軟體開發,必然需要一些庫文件和頭文件,在Linux常用的就是GNU的C語言庫libc,要安裝開發工具必須安裝這個libc6-dev軟體包
11、glibc-doc-reference
理由同上,編程人員最喜歡的參考手冊就是這個軟體包了,可以稱為Linux下C語言編程參考。

此參考手冊有html和info兩種格式,你可以用瀏覽器打開/usr/share/doc/glibc-doc-reference/html目錄下的手冊一頁頁看。把這里每個網頁一點點看完了學會了基本上沒有搞不定的問題了。

12、manpages-dev
在編程的過程中有時會記不得某個函數的用法,通常這時查man手冊是比較快的,所以把這個manpages-dev軟體包安裝上。想要看某個函數的用法就man它。
這個軟體包提供系統調用和庫函數的在線手冊。

13、make
在進行大項目時,通常我們的程序可能是由很多源文件組成的,各個源文件生成自己的目標文件,多個目標文件才鏈接形成一個新的目標文件或可執行程序。
在某個源文件發生變化時,我們只需要按照這種依賴關系運行各命令重新生成程序即可,而不需要對所有源文件重新編譯。哪個該重新編譯呢?可以讓make程序幫忙 維護
14、make-doc
要運行make工具,先得學會怎麼用它吧?看這個軟體包提供的文檔就行了。

安裝好這個軟體包後,用瀏覽器打開/usr/share/doc/make-doc/make.html文檔開始學習make的用法吧。

15、gdb
編寫程序必然需要調試,在Linux常用的程序調試工具是gdb
16、gdb-doc
有了上面的gdb程序調試工具了,怎麼學會使用它呢?安裝這個軟體包gdb-doc,即gdb的文檔

安裝好軟體後就可以通過電腦上的文檔自學gdb的使用了。

17、編輯器
要編寫C程序,總得有個編輯工具吧?Linux下這類工具相當多,關鍵在於熟練掌握一種。
比如文本界面的編輯器vi, vim, emacs等
比如圖形界面的編輯器gedit, kate, kwrite等
又比如IDE環境的:anjuta, eclipse, kdevelop等

選擇一個自己習慣的熟練使用起來就行了。

這些只是基本的Linux下C編程環境必須的軟體包。如果這些熟練掌握了,可以試試下面這些軟體包:
autoconf, automake1.9, libtool, flex, bison
當然還有對應的文檔用於自學。
甚至可以試試IDE環境下其它語言編程,比如gtk, qt等

⑥ Linux下C/C++指針的問題

【int *ptr = NULL;】與 【int *ptr = 0;】是完全相同的。NULL即為0.
這只是聲明了一個指針變數,沒有指向任何變數。

操作指針之前,要先檢查其是否為NULL。if (!ptr) {...}
使用指針之前,給你分配空間,或者給其賦值(賦予某有效地址值)。
就是你的ptr = new int(0);
或者:
int n = 0;
ptr = &n;

⑦ linux 函數手冊 中文版

c標準的手冊在: www.cppreference.com
http://www.gnu.org/software/libc/manual/
官方的GNU C庫函數庫.
linux里的c庫包含了很多擴展函數, 不僅僅包含標准c語言的函數.
//祝你成功

⑧ linux操作系統上c語言編程入門怎麼解決

Linux程序設計入門--進程介紹
Linux下進程的創建
前言:
這篇文章是用來介紹在Linux下和進程相關的各個概念.我們將會學到:
進程的概念
進程的身份
進程的創建
守護進程的創建
----------------------------------------
----
1。進程的概念
Linux操作系統是面向多用戶的.在同一時間可以有許多用戶向操作系統發出各種命
令.那麼操作系統是怎麼實現多用戶的環境呢? 在現代的操作系統裡面,都有程序和進程
的概念.那麼什麼是程序,什麼是進程呢? 通俗的講程序是一個包含可以執行代碼的文件
,是一個靜態的文件.而進程是一個開始執行但是還沒有結束的程序的實例.就是可執行文
件的具體實現. 一個程序可能有許多進程,而每一個進程又可以有許多子進程.依次循環
下去,而產生子孫進程. 當程序被系統調用到內存以後,系統會給程序分配一定的資源(內
存,設備等等)然後進行一系列的復雜操作,使程序變成進程以供系統調用.在系統裡面只
有進程沒有程序,為了區分各個不同的進程,系統給每一個進程分配了一個ID(就象我們的
身份證)以便識別. 為了充分的利用資源,系統還對進程區分了不同的狀態.將進程分為新
建,運行,阻塞,就緒和完成五個狀態. 新建表示進程正在被創建,運行是進程正在運行,阻
塞是進程正在等待某一個事件發生,就緒是表示系統正在等待CPU來執行命令,而完成表示
進程已經結束了系統正在回收資源. 關於進程五個狀態的詳細解說我們可以看《操作系
統》上面有詳細的解說。
2。進程的標志
上面我們知道了進程都有一個ID,那麼我們怎麼得到進程的ID呢?系統調用getpid可
以得到進程的ID,而getppid可以得到父進程(創建調用該函數進程的進程)的ID.
#include <unistd>
pid_t getpid(void);
pid_t getppid(void);
進程是為程序服務的,而程序是為了用戶服務的.系統為了找到進程的用戶名,還為進程和
用戶建立聯系.這個用戶稱為進程的所有者.相應的每一個用戶也有一個用戶ID.通過系統
調用getuid可以得到進程的所有者的ID.由於進程要用到一些資源,而Linux對系統資源是
進行保護的,為了獲取一定資源進程還有一個有效用戶ID.這個ID和系統的資源使用有關
,涉及到進程的許可權. 通過系統調用geteuid我們可以得到進程的有效用戶ID. 和用戶ID
相對應進程還有一個組ID和有效組ID系統調用getgid和getegid可以分別得到組ID和有效
組ID
#include <unistd>
#include <sys/types.h>

uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
git_t getegid(void);
有時候我們還會對用戶的其他信息感興趣(登錄名等等),這個時候我們可以調用getpwui
d來得到.
struct passwd {
char *pw_name; /* 登錄名稱 */
char *pw_passwd; /* 登錄口令 */
uid_t pw_uid; /* 用戶ID */
gid_t pw_gid; /* 用戶組ID */
char *pw_gecos; /* 用戶的真名 */
char *pw_dir; /* 用戶的目錄 */
char *pw_shell; /* 用戶的SHELL */
};
#include <pwd.h>
#include <sys/types.h>

struct passwd *getpwuid(uid_t uid);
下面我們學習一個實例來實踐一下上面我們所學習的幾個函數:
#include <unistd.h>
#include <pwd.h>
#include <sys/types.h>
#include <stdio.h>
int main(int argc,char **argv)
{
pid_t my_pid,parent_pid;
uid_t my_uid,my_euid;
gid_t my_gid,my_egid;
struct passwd *my_info;
my_pid=getpid();
parent_pid=getppid();
my_uid=getuid();
my_euid=geteuid();
my_gid=getgid();
my_egid=getegid();
my_info=getpwuid(my_uid);
printf("Process ID:%ld/n",my_pid);
printf("Parent ID:%ld/n",parent_pid);
printf("User ID:%ld/n",my_uid);
printf("Effective User ID:%ld/n",my_euid);
printf("Group ID:%ld/n",my_gid);
printf("Effective Group ID:%ld/n",my_egid):
if(my_info)
{
printf("My Login Name:%s/n" ,my_info->pw_name);
printf("My Password :%s/n" ,my_info->pw_passwd);
printf("My User ID :%ld/n",my_info->pw_uid);
printf("My Group ID :%ld/n",my_info->pw_gid);
printf("My Real Name:%s/n" ,my_info->pw_gecos);
printf("My Home Dir :%s/n", my_info->pw_dir);
printf("My Work Shell:%s/n", my_info->pw_shell);
}
}
3。進程的創建
創建一個進程的系統調用很簡單.我們只要調用fork函數就可以了.
#include <unistd.h>

pid_t fork();
當一個進程調用了fork以後,系統會創建一個子進程.這個子進程和父進程不同的地方只
有他的進程ID和父進程ID,其他的都是一樣.就象符進程克隆(clone)自己一樣.當然創建
兩個一模一樣的進程是沒有意義的.為了區分父進程和子進程,我們必須跟蹤fork的返回
值. 當fork掉用失敗的時候(內存不足或者是用戶的最大進程數已到)fork返回-1,否則f
ork的返回值有重要的作用.對於父進程fork返回子進程的ID,而對於fork子進程返回0.我
們就是根據這個返回值來區分父子進程的. 父進程為什麼要創建子進程呢?前面我們已經
說過了Linux是一個多用戶操作系統,在同一時間會有許多的用戶在爭奪系統的資源.有時
進程為了早一點完成任務就創建子進程來爭奪資源. 一旦子進程被創建,父子進程一起從
fork處繼續執行,相互競爭系統的資源.有時候我們希望子進程繼續執行,而父進程阻塞直
到子進程完成任務.這個時候我們可以調用wait或者waitpid系統調用.
#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *stat_loc);
pid_t waitpid(pid_t pid,int *stat_loc,int options);
wait系統調用會使父進程阻塞直到一個子進程結束或者是父進程接受到了一個信號.如果
沒有父進程沒有子進程或者他的子進程已經結束了wait回立即返回.成功時(因一個子進
程結束)wait將返回子進程的ID,否則返回-1,並設置全局變數errno.stat_loc是子進程的
退出狀態.子進程調用exit,_exit 或者是return來設置這個值. 為了得到這個值Linux定
義了幾個宏來測試這個返回值.
WIFEXITED:判斷子進程退出值是非0
WEXITSTATUS:判斷子進程的退出值(當子進程退出時非0).
WIFSIGNALED:子進程由於有沒有獲得的信號而退出.
WTERMSIG:子進程沒有獲得的信號號(在WIFSIGNALED為真時才有意義).
waitpid等待指定的子進程直到子進程返回.如果pid為正值則等待指定的進程(pid).如果
為0則等待任何一個組ID和調用者的組ID相同的進程.為-1時等同於wait調用.小於-1時等
待任何一個組ID等於pid絕對值的進程. stat_loc和wait的意義一樣. options可以決定
父進程的狀態.可以取兩個值 WNOHANG:父進程立即返回當沒有子進程存在時. WUNTACHE
D:當子進程結束時waitpid返回,但是子進程的退出狀態不可得到.
父進程創建子進程後,子進程一般要執行不同的程序.為了調用系統程序,我們可以使用系
統調用exec族調用.exec族調用有著5個函數.
#include <unistd.h>
int execl(const char *path,const char *arg,...);
int execlp(const char *file,const char *arg,...);
int execle(const char *path,const char *arg,...);
int execv(const char *path,char *const argv[]);
int execvp(const char *file,char *const argv[]):
exec族調用可以執行給定程序.關於exec族調用的詳細解說可以參考系統手冊(man exec
l). 下面我們來學習一個實例.注意編譯的時候要加 -lm以便連接數學函數庫.
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <errno.h>
#include <math.h>
void main(void)
{
pid_t child;
int status;
printf("This will demostrate how to get child status/n");
if((child=fork())==-1)
{
printf("Fork Error :%s/n",strerror(errno));
exit(1);
}
else if(child==0)
{
int i;
printf("I am the child:%ld/n",getpid());
for(i=0;i<1000000;i++) sin(i);
i=5;
printf("I exit with %d/n",i);
exit(i);
}
while(((child=wait(&status))==-1)&(errno==EINTR));
if(child==-1)
printf("Wait Error:%s/n",strerror(errno));
else if(!status)
printf("Child %ld terminated normally return status is zero/n",
child);
else if(WIFEXITED(status))
printf("Child %ld terminated normally return status is %d/n",
child,WEXITSTATUS(status));
else if(WIFSIGNALED(status))
printf("Child %ld terminated e to signal %d znot caught/n",
child,WTERMSIG(status));
}
strerror函數會返回一個指定的錯誤號的錯誤信息的字元串.
4。守護進程的創建
如果你在DOS時代編寫過程序,那麼你也許知道在DOS下為了編寫一個常駐內存的程序
我們要編寫多少代碼了.相反如果在Linux下編寫一個"常駐內存"的程序卻是很容易的.我
們只要幾行代碼就可以做到. 實際上由於Linux是多任務操作系統,我們就是不編寫代碼
也可以把一個程序放到後台去執行的.我們只要在命令後面加上&符號SHELL就會把我們的
程序放到後台去運行的. 這里我們"開發"一個後台檢查郵件的程序.這個程序每個一個指
定的時間回去檢查我們的郵箱,如果發現我們有郵件了,會不斷的報警(通過機箱上的小喇
叭來發出聲音). 後面有這個函數的加強版本加強版本
後台進程的創建思想: 首先父進程創建一個子進程.然後子進程殺死父進程(是不是很無
情?). 信號處理所有的工作由子進程來處理.
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
/* Linux 的默任個人的郵箱地址是 /var/spool/mail/用戶的登錄名 */
#define MAIL "/var/spool/mail/hoyt"
/* 睡眠10秒鍾 */

#define SLEEP_TIME 10
main(void)
{
pid_t child;
if((child=fork())==-1)
{
printf("Fork Error:%s/n",strerror(errno));
exit(1);
}
else if(child>0)
while(1);
if(kill(getppid(),SIGTERM)==-1)
{
printf("Kill Parent Error:%s/n",strerror(errno));
exit(1);
}
{
int mailfd;
while(1)
{
if((mailfd=open(MAIL,O_RDONLY))!=-1)
{
fprintf(stderr,"%s","7");
close(mailfd);
}
sleep(SLEEP_TIME);
}
}
}
你可以在默認的路徑下創建你的郵箱文件,然後測試一下這個程序.當然這個程序還有很
多地方要改善的.我們後面會對這個小程序改善的,再看我的改善之前你可以嘗試自己改
善一下.比如讓用戶指定郵相的路徑和睡眠時間等等.相信自己可以做到的.動手吧,勇敢
的探險者.
好了進程一節的內容我們就先學到這里了.進程是一個非常重要的概念,許多的程序都會
用子進程.創建一個子進程是每一個程序員的基本要求!

⑨ Linux C函數庫參考手冊要完整版的,不要那種常用版

The GNU C Library Reference Manual,不過是英文的。

⑩ Linux C開發中的「va_arg, va_start, va_end,va_list」分別表示什麼意思

這是用於實現可變參數的幾個宏,比如printf()這個函數的可變參數就是用這幾個宏實現的。
參考這個,講的很清楚:
http://www.cppblog.com/qiujian5628/archive/2008/01/21/41562.html

閱讀全文

與linuxc參考手冊相關的資料

熱點內容
程序員開車賣服裝 瀏覽:393
快速記憶法pdf 瀏覽:516
java定義異常類 瀏覽:707
的運行命令 瀏覽:585
24v電動駐車空調壓縮機 瀏覽:840
老程序員編程步驟 瀏覽:305
物理去除加密軟體 瀏覽:227
匯編語言可調試編譯器 瀏覽:447
jpeg如何轉成pdf 瀏覽:841
微機室為什麼有伺服器 瀏覽:657
安卓手機怎麼打語音電話不斷網 瀏覽:458
單片機匯編頭文件 瀏覽:946
juniper命令行 瀏覽:68
程序員咨詢銷售工作怎麼樣 瀏覽:782
蘋果文件伺服器是什麼 瀏覽:180
企業透明加密軟體有監視功能嗎 瀏覽:494
桌面的運行命令 瀏覽:10
主流廠商伺服器維護流程是什麼 瀏覽:807
壓縮棉的被子先洗洗在用 瀏覽:242
批處理bat代碼和文件夾 瀏覽:298