linux編程
如果只是從人工智慧的角度來說,linux的優勢並不大。我能想到的幾個可能的優勢有:
1) 包管理。比如你要用c++的一個庫opencv,linux下面直接apt-get install libopencv,然後在makefile裡面加上-I `pkg-config opencv`就好了。如果是(老版)visual studio裡面你要先打開瀏覽器,搜索opencv的網站,下載,解壓,記住路徑,回到vs右擊工程,點屬性,vc++ directories,點編輯,點添加,把路徑粘貼進去。蛋都要碎了。
但是!這個優勢只在vs2010發布以前有效。新版的vs你只需要右擊工程,點nu-get package manager,然後搜索opencv點確定就沒了。
2) 各種自動化。比如你寫了個訓練svm的程序,有1000個svm要訓練。在linux下面可以把這個訓練的程序編譯成可執行文件trainsvm,介面是類似./trainsvm input1.txt svm1.dat。然後在命令行下面seq 1 1000 | xargs -I{} -n 1 -P 12 bash -c './trainsvm input{}.txt svm{}.dat'一下就開了12個進程一塊訓練,某個進程訓練完了以後立馬會有下一個補上有木有。(就是管程的概念)我在windows下面用c#實現這樣的功能要將近100行,還沒有xargs靈活。批量處理超級方便啊。用parallel還可以在多台機器上分布式訓練。
但是!你在windows上裝個cygwin這些也全都有。。
3) 有時候數據量太大了需要去amazon租ec2並行計算。windows機器比linux貴啊摔。還有配置相對慢。linux弄個小腳本分分鍾就把環境都配好了(夾個私貨,比如這是我的ec2 linux配直腳本 https://github.com/grapeot/debianinit )。價格這個無解。。配置方面windows的非官方包管理器chocolatey還比較弱,如果有誰知道如何快速配置windows環境歡迎指教。
所以基本結論是,如果只是想日人工智慧,老老實實拱演算法先,哪個熟用哪個。如果蛋痛想折騰,linux可玩性和逼格都要更勝一籌。而且用熟了以後完成任務(get things done)的能力會加強不少。
⑵ 給我簡單說下,linux編程 怎麼入門
LINUX操作系統常用命令,先會十來個常用的就可以ls cd mkdir rmdir cp mv rm
vi 的使用及簡單的命令,很簡單,一會就會。
gcc g++的使用,也就是命令,參數,常用的就那幾個
makefile編寫,看明白了也沒什麼,稍有點難,其實如果初級階段寫些簡單的還是不成問題
SHELL編寫,很容易編寫簡單的,復雜的我也沒試過,學過一點,但是因為工作沒用就沒再接觸,反正要是學先熟悉一下。
gdb調試,說難有點難,說不難其實和VC一樣,只不過都用命令的行式,有時候有點不習慣
接下來就是一些LINUX C/C++的API的學習了,和VC有點不一樣,但是其實功能都一樣,對照一下都會了。線程、進程、網路編程等等
對於資料庫的操作,ORACLE MYSQL SQLSERVER常用的掌握一下
環境變數總要會配吧
共享庫到最後也應該去寫吧,也就是VC中的DLL,不過不寫也沒關系。
能想到的就這么多了,希望可以對你有幫助,現在,我該去准備我離職工作交接什麼去了,祝你好運!推薦書籍《鳥哥的linux私房菜》《linux就該這么學》
⑶ 到底怎麼在Linux里編寫c程序啊
在linux下通常使用gedit或vim直接編寫.c程序,然後通過gcc指令編譯。以Ubuntu系統為例,詳細過程如下:
1、進入桌面Temp文件夾
⑷ linux編程
vi是linux中集成的一個文本編輯器(Visual Interface),linux內置的,vi即打開的命令
相關的vim,具有編程能力的編輯器
⑸ linux下的編程,用什麼語言的最多
主要是C,C是Linux的「母語」,這也是linux這個開源環境和本身機制所導致的,就連linus都力挺C,而駁斥C++。雖然沒必要拒絕C++,但是,不可否認,C更適合linux~。
不過寫Qt圖形程序這種情況下,C++是首選(Qt庫是C++寫的)。
在動態網頁上還可以用perl、python、java之類的;
一般系統管理員和普通用戶,用的最多的恐怕就是bash了,shell可以完成一系列動作和自動化管理。當然,這里也可以用perl或python之類的腳本語言。想知道更多Linux知識可參考下《Linux就該這么學》。
⑹ 什麼是Linux下的編程
編程掌握的是一種思想。
linux和windows是不同的操作系統平台
如果單純用c的話,用stdio庫,那麼linux和windows編程沒有任何區別,除了生成的obj和最終的可執行文件不同
vc 是只能用於windows 平台下的編程
linux下的編程一般都沒有IDE,都是寫Makefile文件,然後編譯
當然還是要跨平台的好一些
⑺ linux上如何編程
用編輯器寫代碼,用編譯程序編譯、連接。也有類似於windows系統的SDK,集寫、編譯、調試與一體。
⑻ 程序員怎樣用Linux編程
在Linux上編程一般都是文本編輯器(Vim、emacs等工具)+編譯器(GCC、g++、make、cmake等工具)+調試器(gdb),在Linux上用集成開發環境IDE(Linux上一般用codeblocks、eclipse-cdt等)的程序員要比Windows少。我才開始用的是eclipse-cdt,就是覺得IDE不好用,竟然寫一個helloworld都要產生一大堆項目文件,這樣的話如果是用git來維護管理代碼就有些不方便了,而且如果編寫的是命令行程序調試時會反復切換到終端,還不如直接在終端編譯、調試,總之太不靈活。不過也有用gdb用得不習慣的,畢竟有些是從Windows上過來的,那就可以選擇gdb的圖形前端ddd和Kdbg這兩個軟體,這兩個軟體只是gdb的圖形外殼,它們還是調用gdb來實現程序調試,但操作上方便多了。也有覺得用命令行編輯器不習慣的,他們會選擇圖形界面的gVim+各種Vim插件,還有圖形界面更友好的代碼編輯器如gedit、Sublime Text、Atom、VScode等等。
⑼ 如何學習linux編程
這樣基本上系統方面的就可以掌握了。如果繼續網路編程,建議看《TCP/IP進行網際互連》的第三卷,裡面有很多關於應用協議telnet、ftp等協議的編程。 建議學習路徑: 首先先學學編輯器,vim, emacs什麼的都行。 然後學make file文件,只要知道一點就行,這樣就可以准備編程序了。 然後看看《C程序設計語言》K&R,這樣呢,基本上就可以進行一般的編程了,順便找本數據結構的書來看。 如果想學習UNIX/LINUX的編程,《APUE》絕對經典的教材,加深一下功底,學習《UNP》的第二卷。這樣基本上系統方面的就可以掌握了。 然後再看Douglus E. Comer的《用TCP/IP進行網際互連》第一卷,學習一下網路的知識,再看《UNP》的第一卷,不僅學習網路編程,而且對系統編程的一些常用的技巧就很熟悉了,如果繼續網路編程,建議看《TCP/IP進行網際互連》的第三卷,裡面有很多關於應用協議telnet、ftp等協議的編程。 如果想寫設備驅動程序,首先您的系統編程的介面比如文件、IPC等必須要熟知了,再學習《LDD》2。 對於幾本經典教材的評價: 《The C Programing Language》K&R 經典的C語言程序設計教材,作者是C語言的發明者,教材內容深入淺出。雖然有點老,但是必備的一本手冊,現在有時候 我還常翻翻。篇幅比較小,但是每看一遍,就有一遍的收獲。另外也可用譚浩強的《C語言程序設計》代替。 《Advanced Programing in Unix Envirement》 W.Richard Stevens:也是非常經典的書(廢話,Stevens的書哪有不經典的!),雖然初學者就可以看,但是事實上它是《Unix Network Programing》的一本輔助資料。國內的翻譯的《UNIX環境高級編程》的水平不怎麼樣,現在有影印版,直接讀英文比讀中文來 得容易。 《Unix Network Programing》W.Richard Stevens:第一卷講BSD Socket網路編程介面和另外一種網路編程介面的,不過現在一般都用BSD Socket,所以這本書 只要看大約一半多就可以了。第二卷沒有設計到網路的東西,主要講進程間通訊和Posix線程。所以看了《APUE》以後,就可以看它了,基本上系統的東西就由 《APUE》和《UNP》vol2概括了。看過《UNP》以後,您就會知道系統編程的絕大部分編程技巧,即使卷一是講網路編程的。國內是清華翻譯得《Unix網路編程》 ,翻譯者得功底也比較高,翻譯地比較好。所以建議還是看中文版。 《TCP/IP祥解》一共三卷,卷一講協議,卷二講實現,卷三講編程應用。我沒有怎麼看過。,但是據說也很經典的,因為我沒有時間看卷二,所以不便評價。 《用TCP/IP進行網際互連》Douglus.E.Comer 一共三卷,卷一講原理,卷二講實現,卷三講高級協議。感覺上這一套要比Stevens的那一套要好,就連Stevens也不得不承認它的第一卷非常經典。事實上,第一卷即使你沒有一點網路的知識,看完以後也會對網路的來龍去脈了如指掌。第一卷中還有很多習題也設計得經典和實用,因為作者本身就是一位教師,並且卷一是國外研究生的教材。習題並沒有答案,留給讀者思考,因為問題得答案可以讓你成為一個中級的Hacker,這些問題的答案可以象Douglus索取,不過只有他只給教師卷二我沒有怎麼看,卷三可以作為參考手冊,其中地例子也很經典。如果您看過Qterm的源代碼,就會知道Qterm的telnet實現部分大多數就是從這本書的源代碼過來的。對於網路原理的書,我推薦它,而不是Stevens的《TCP/IP祥解》。 《Operating System - Design and Implement》這個是講操作系統的書,用Minix做的例子。作者母語不是英文,所以英文看起來比較晦澀。國內翻譯的是 《操作系統 設計與實現》,我沒看過中文版,因為翻譯者是尤晉元,他翻譯的《APUE》已經讓我失望頭頂了。讀了這本書,對操作系統的底層怎麼工作的就會 有一個清晰的認識。 《Linux Device Driver》2e ,為數不多的關於Linux設備驅動程序的好書。不過內容有些雜亂,如果您沒有一些寫驅動的經驗,初次看會有些摸不著南北。國內翻譯的是《Linux設備驅動程序》第二版,第一版,第二版的譯者我都有很深的接觸,不過總體上來說,雖然第二版翻譯的有些不盡人意,但是相比第一版來說已經超出了一大截。要讀這一本書,至少應該先找一些《計算機原理》《計算機體系結構》的書來馬馬虎虎讀讀,至少應該對硬體和計算機的工作過程有一些了解。
⑽ 在linux環境下編程;
沒時間寫,看下對你是否有幫助....函數都是獲取文件(普通文件,目錄,管道,socket,字元,塊()的屬性。函數原型#include <sys/stat.h>int stat(const char *restrict pathname, struct stat *restrict buf);提供文件名字,獲取文件對應屬性。
int fstat(int filedes, struct stat *buf);通過文件描述符獲取文件對應的屬性。
int lstat(const char *restrict pathname, struct stat *restrict buf);連接文件描述命,獲取文件屬性。 2 文件對應的屬性struct stat {
mode_t st_mode; //文件對應的模式,文件,目錄等
ino_t st_ino; //inode節點號
dev_t st_dev; //設備號碼
dev_t st_rdev; //特殊設備號碼
nlink_t st_nlink; //文件的連接數
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者對應的組
off_t st_size; //普通文件,對應的文件位元組數
time_t st_atime; //文件最後被訪問的時間
time_t st_mtime; //文件內容最後被修改的時間
time_t st_ctime; //文件狀態改變時間
blksize_t st_blksize; //文件內容對應的塊大小
blkcnt_t st_blocks; //偉建內容對應的塊數量
}; 可以通過上面提供的函數,返回一個結構體,保存著文件的信息。長湖區的信息是文件的所有者和文件的模式。#include<iostream.h>//C++ 獲得文件狀態信息源碼,C++ 獲得文件所在磁碟盤符源碼,C++ 文件創建時間源碼,C++ 訪問時間源碼,C++ 最後修改日期源碼,No such file or directory(無此文件或索引)#include <time.h>#include <sys/types.h>#include <sys/stat.h>#include <stdio.h>void main( void ){ struct stat buf; int result; //獲得文件狀態信息 result =stat( "D:\ok2002.txt", &buf ); //顯示文件狀態信息 if( result != 0 ) perror( "顯示文件狀態信息出錯" );//並提示出錯的原因,如No such file or directory(無此文件或索引) else { cout<<"文件大小:"<<buf.st_size<<"位元組"<<endl; cout<<"所在磁碟盤符 :"; cout<<char(buf.st_dev + 'A')<<endl; cout<<"文件創建時間:"<<ctime(&buf.st_ctime); cout<<"訪問日期:"<<ctime(&buf.st_atime);//注意這里訪問時間為00:00:00為正常 cout<<"最後修改日期:"<<ctime(&buf.st_mtime); }}
相關函數:utimes, stat
表頭文件:#include <sys/types.h>
#include <utime.h>
定義函數:int utime(const char *filename, struct utimbuf *buf)
函數說明:utime()用來修改參數filename文件所屬的inode存取時間。結構utimbuf定義如下
struct utimbuf{
time_t actime; /*存取時間*/
time_t modtime; /*更改時間*/
};如果參數buf為空指針(NULL), 則該文件的存取時間和更改時間全部會設為目前時間返回值: 成功0, 失敗-1, 錯誤代碼存於errno
錯誤代碼:
EACCESS 存取文件時被拒絕,許可權不足
ENOENT 指定的文件不存在