① linux下有沒有類似Windows的VC下的kbhit()函數我需要用
① 沒有直接的對應,需要自己實現。
② 可以寫c函數、匯編、或用第3方跨平台的函數庫(比如ncurses)。下面是linux下c函數實現:
#include<stdio.h>
#include<termios.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/time.h>
voidchangemode(int);
intkbhit(void);
intmain(void)
{
intch;
changemode(1);/*注意,打開mode*/
while(!kbhit())
{
putchar('.');
}
ch=getchar();
printf(" Got%c ",ch);
changemode(0);/*注意,關閉mode*/
return0;
}
voidchangemode(intdir)
{
staticstructtermiosoldt,newt;
if(dir==1)
{
tcgetattr(STDIN_FILENO,&oldt);
newt=oldt;
newt.c_lflag&=~(ICANON|ECHO);
tcsetattr(STDIN_FILENO,TCSANOW,&newt);
}
else
tcsetattr(STDIN_FILENO,TCSANOW,&oldt);
}
intkbhit(void)
{
structtimevaltv;
fd_setrdfs;
tv.tv_sec=0;
tv.tv_usec=0;
FD_ZERO(&rdfs);
FD_SET(STDIN_FILENO,&rdfs);
select(STDIN_FILENO+1,&rdfs,NULL,NULL,&tv);
returnFD_ISSET(STDIN_FILENO,&rdfs);
}
---- 上述代碼來自互聯網。
② 從事linux 下c開發,要學哪些知識推薦一下每個學習階段的書籍,越詳細越好。
想要把C開發學好,最有效的方法,是從用linux系統開始,安裝linux或者linux虛擬機,邊用邊學。這里推薦一本極好的書《鳥哥liunx私房菜》,通俗易懂,真的很不錯!
然後就是C開發,分為兩大塊:底層與應用!
C開發相對伺服器管理較為深奧的,需要長時間的積累,還要了解硬體知識,操作系統的基本原理,Makefile語法等。建議從驅動程序入手,因為驅動程序是linux內核中模塊化比較強的部分,相對易於理解,而且鏈接軟體與硬體,能夠從整體來學習。
這方面有很多經典書籍,其中入門比較好的有:
《嵌入式Linux應用開發完全手冊》 韋東山著
內核與驅動編程類: 《linux設備驅動開發詳解》 宋寶華著
《linux內核設計與實現》 Robert Love著 (學內核最好讀物)
linux應用編程類: 《Unix環境高級編程》 (被譽為「聖經」)
《linux程序設計》
建議先看應用編程類,因為不涉及底層的內容,相對容易理解。等到這幾本書消化的差不多了,就開始看經典之作《linux設備驅動程序》和《深入理解linux內核了》,這兩本書非常權威,我也都看過,覺得講的確實比其他書籍更細節,更准確。
這些基本可以說是最好的學習linux的書籍,只要循序漸進的看書,實踐,一定會有效果的。
③ linux下c語言編程read()函數的問題
返回-1的時候,要根據錯誤碼來判斷原因,請看下面的函數說明:
表頭文件 #include<unistd.h>
定義函數版 ssize_t read(int fd,void * buf ,size_t count);
函數說明 read()會把參數fd 所指權的文件傳送count個位元組到buf指針所指的內存中。若參數count為0,則read()不會有作用並返回0。返回值為實際讀取到的位元組數,如果返回0,表示已到達文件尾或是無可讀取的數據,此外文件讀寫位置會隨讀取到的位元組移動。
附加說明 如果順利read()會返回實際讀到的位元組數,最好能將返回值與參數count 作比較,若返回的位元組數比要求讀取的位元組數少,則有可能讀到了文件尾、從管道(pipe)或終端機讀取,或者是read()被信號中斷了讀取動作。當有錯誤發生時則返回-1,錯誤代碼存入errno中,而文件讀寫位置則無法預期。
錯誤代碼 EINTR 此調用被信號所中斷。 EAGAIN 當使用不可阻斷I/O 時(O_NONBLOCK),若無數據可讀取則返回此值。 EBADF 參數fd 非有效的文件描述詞,或該文件已關閉。
④ linux下C語言的庫函數的頭文件放在哪個目錄下啊
一般來說是放在來/usr/include目錄下的;
但是這個源並不局限也是可控的,如果我們進行開發過程中, 就會在內核的庫函數文件目錄:
例如在:/XXX/XXX/linux-X.X/include
所以根據不同的情況,頭文件存放的目錄也是不同的,具體需要可以根據locate和grep命令進行查詢。