selectc語言
❶ 請問一個linux c語言 select()函數問題。
maxfdp1是你要監聽的最大文件描述符+1;這個你設置對了嗎?
❷ C語言中,select...case和 if...else if 哪個執行效率更高
沒有select case
只有switch case
1、 總體上說,switch...case 效率要高於同樣條件下的if...else,特別是當專條件分支較多時。
2、switch...case佔用較多的屬代碼空間,因為它要生成跳錶,特別是當case常量分布范圍很大但實際有效值又比較少的情況,switch...case的空間利用率將變得很低。例如上面的代碼,如果把case 10改成case 100,則會生成101個表項,而大部分表項是指向同一分支(default分支)。switch...case是在以空間換時間。
3、switch...case只能處理case為常量的情況,對非常量的情況是無能為力的。例如 if (a > 1 && a < 100),是無法使用switch...case來處理的。
轉自CSDN博客
❸ SQL語句怎麼插入到C語言語句中
1、創建一個SQL文件。
此文件在ISQL中創建,文件內容是所希望執行的SQL語句。
2、在WinCC的C Script中編寫程序調用此SQL文件,如以下程序所示:
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName,
char* lpszObjectName,
char* lpszPropertyName,
UINT nFlags, int x, int y)
{
char*a="C:\\SIEMENS\\Common\\SQLANY\\ISQL-q-b-c
UID=DBA;PWD=SQL;DBF=E:\\testsql\\testsqlRT.DB;
DBN=CC_testsql_99-12-03_12:48:26R;READ
E:\\testsql\\test.sql";
printf("%s\r\n",a);
ProgramExecute(a);
}
下面是一個簡單的SQL文件內容:
select * from pde#hd#t#test;
output to E:\\test2.txt FORMAT ascii
注意:文件名及路徑中不要帶空格。
❹ c語言gets(select)什麼意思
將緩沖區中的一行數據以字元串的形式讀入到select中去,遇到換行符時停止讀入
❺ c語言中select用通俗的話說,他是幹麼的
Socket編程你懂嗎
不懂的話就不要問了 ,說了你也不會懂啊
❻ c語言中的選擇語句 是select case……end select 還是switch
switch
EX:
main()
{
int a = 1, b = 0;
switch(a)
{
case 1:
switch(b) //執行到這里
{
case 0:printf("**0**");break; //輸出
case 1:printf("**1**");break;
}//注意!這里的switch並沒有break;所以繼續向下執行,執行了 printf("**2**");,雖然a不等於2,但是由於沒有Break會繼續向下執行的,這就是為什麼switch(b)里要加兩個break的緣故,沒有break會向下執行而不是跳出選擇
case 2:printf("**2**");break;
}
}
❼ c語言中select函數的作用
在編程的過程中,經常會遇到許多阻塞的函數,好像read和網路編程時使用的recv, recvfrom函數都是阻塞的函數,當函數不能成功執行的時候,程序就會一直阻塞在這里,無法執行下面的代碼。這是就需要用到非阻塞的編程方式,使用selcet函數就可以實現非阻塞編程。
selcet函數是一個輪循函數,即當循環詢問文件節點,可設置超時時間,超時時間到了就跳過代碼繼續往下執行。
Select的函數格式:
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval*timeout);
select函數有5個參數
第一個是所有文件節點的最大值加1,如果我有三個文件節點1、4、6,那第一個參數就為7(6+1)
第二個是可讀文件節點集,類型為fd_set。通過FD_ZERO(&readfd);初始化節點集;然後通過FD_SET(fd, &readfd);把需要監聽是否可讀的節點加入節點集
第三個是可寫文件節點集中,類型為fd_set。操作方法和第二個參數一樣。
第四個參數是檢查節點錯誤集。
第五個參數是超時參數,類型為struct timeval,然後可以設置超時時間,分別可設置秒timeout.tv_sec和微秒timeout.tv_usec。
然後調用select函數,用FD_ISSET()函數判斷節點是否可讀寫。返回值不為0表示可讀寫,為0表示不可讀寫。select函數的返回值為是一個整數,表示有幾個節點可讀寫。
先說明兩個結構體:
第一,struct fd_set可以理解為一個集合,這個集合中存放的是文件描述符(filedescriptor),即文件句柄,這可以是我們所說的普通意義的文件,當然Unix下任何設備、管道、FIFO等都是文件形式,全部包括在內,所以毫無疑問一個socket就是一個文件,socket句柄就是一個文件描述符。fd_set集合可以通過一些宏由人為來操作,比如清空集合FD_ZERO(fd_set *),將一個給定的文件描述符加入集合之中FD_SET(int ,fd_set*),將一個給定的文件描述符從集合中刪除FD_CLR(int,fd_set*),檢查集合中指定的文件描述符是否可以讀寫FD_ISSET(int ,fd_set* )。
第二,struct timeval是一個大家常用的結構,用來代表時間值,有兩個成員,一個是秒數,另一個是毫秒數。
具體解釋select的參數:
int maxfdp是一個整數值,是指集合中所有文件描述符的范圍,即所有文件描述符的最大值加1,不能錯!在Windows中這個參數的值無所謂,可以設置不正確。
fd_set * readfds是指向fd_set結構的指針,這個集合中應該包括文件描述符,我們是要監視這些文件描述符的讀變化的,即我們關心是否可以從這些文件中讀取數據了,如果這個集合中有一個文件可讀,select就會返回一個大於0的值,表示有文件可讀,如果沒有可讀的文件,則根據timeout參數再判斷是否超時,若超出timeout的時間,select返回0,若發生錯誤返回負值。可以傳入NULL值,表示不關心任何文件的讀變化。
fd_set * writefds是指向fd_set結構的指針,這個集合中應該包括文件描述符,我們是要監視這些文件描述符的寫變化的,即我們關心是否可以向這些文件中寫入數據了,如果這個集合中有一個文件可寫,select就會返回一個大於0的值,表示有文件可寫,如果沒有可寫的文件,則根據timeout參數再判斷是否超時,若超出timeout的時間,select返回0,若發生錯誤返回負值。可以傳入NULL值,表示不關心任何文件的寫變化。
fd_set * errorfds同上面兩個參數的意圖,用來監視文件錯誤異常。
struct timeval * timeout是select的超時時間,這個參數至關重要,它可以使select處於三種狀態,第一,若將NULL以形參傳入,即不傳入時間結構,就是將select置於阻塞狀態,一定等到監視文件描述符集合中某個文件描述符發生變化為止;第二,若將時間值設為0秒0毫秒,就變成一個純粹的非阻塞函數,不管文件描述符是否有變化,都立刻返回繼續執行,文件無變化返回0,有變化返回一個正值;第三,timeout的值大於0,這就是等待的超時時間,即select在timeout時間內阻塞,超時時間之內有事件到來就返回了,否則在超時後不管怎樣一定返回,返回值同上述。
返回值:返回狀態發生變化的描述符總數。
負值:select錯誤
正值:某些文件可讀寫或出錯
0:等待超時,沒有可讀寫或錯誤的文件
❽ 求高手指導sql的小問題。 怎樣用C語言獲取select所選出來的值
查詢需要回調函數,否則你的查詢結果如何處理?
參見:http://www.sqlite.com.cn/MySqlite/4/461.Html C/C++中調用內SQLITE3的基本步容驟
❾ C語言 select函數,第一個參數,為什麼需要最大文件描述符加1
只是起始值不匹配吧,文件描述符是0開始的,select是從1開始的。
❿ linux C語言select函數怎麼不能實現sleep呀
1、函數: Sleep
功 能: 執行掛起一段時間
用 法: void Sleep(DWORD dwMilliseconds);
在VC中使用帶上頭專文件屬
#include <windows.h>
( Sleep函數存放頭文件:WinBase.h)
在gcc編譯器中,使用的頭文件因gcc版本的不同而不同
#include <unistd.h>
Sleep()單位為毫秒,sleep()單位為秒(如果需要更精確可以用usleep單位為微秒)
返回值
若進程/線程掛起到參數所指定的時間則返回0,若有信號中斷則返回剩餘秒數。
2、示例
#include<windows.h>
#include<stdio.h>
intmain()
{
inta;
a=1000;
printf("你");
Sleep(a);/*VC使用Sleep*/
printf("好");/*輸出「你」和「好」之間會間隔一千毫秒,即間隔一秒,Sleep()的單位為毫秒*/
return0;
}