亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1868 | 回復(fù): 6
打印 上一主題 下一主題

幫忙解釋一段APUE中的代碼,謝謝 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-05-09 20:38 |只看該作者 |倒序?yàn)g覽
程序清單10-9 sigaddset, sigdelset和sigismember的實(shí)現(xiàn)

#include <signal.h>
#include <errno.h>

/* <signal.h> usually defines NSIG to include signal number 0 */         <signal.h>頭文件通常定義NSIG來包含信號(hào)編號(hào)0?是這個(gè)意思嗎?NSIG具體是等于多少呢?我查了<signal.h>也沒查出個(gè)所以然來
#define SIGBAD(signo) ((signo) <= 0 || (signo) >= NSIG)           

int
sigaddset(sigset_t *set, int signo)
{
        if(SIGBAD(signo))        { errno = EINVAL; return(-1); }
        *set |= 1 << (signo-1) ;                /* turn bit on */       這句是幾乎不懂,大概是基礎(chǔ)太差了,郁悶阿!!!為什么是signo-1?接著是1<<(signo-1)位移運(yùn)算?然后是和信號(hào)集按位或吧?實(shí)在不明白為什么,希望前輩們可以詳細(xì)解釋一下,不勝感激啊!這句明白了,下面兩句應(yīng)該就沒問題了        return(0);
}

int
sigdelset(sigset_t *set, int signo)
{
        if(SIGBAD(signo)) { errno = EINVAL; return(-1); }
        set &= ~(1 <<(signo-1));                /*turn bit off*/      
        return(0);
}

int sigismember(const sigset_t *set, int signo)
{
        if(SIGBAD(signo)) { errno = EINVAL; return(-1); }
        return((*set & (1 << (signo-1))) != 0);
}

在此先謝謝大家的熱心幫忙!不勝感激!

[ 本帖最后由 李某人 于 2009-5-10 12:29 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-05-09 21:12 |只看該作者
頂一個(gè)

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-05-09 21:15 |只看該作者
一定有,繼續(xù)找。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-05-09 21:20 |只看該作者

我有好幾個(gè)疑問噢

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-05-09 23:34 |只看該作者
看一下c語言位操作的

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-05-10 09:58 |只看該作者
1 => 其二進(jìn)制碼為:第一位(bit0)為 “1”,其它位全零
1 << (signo-1)  => 把 “1” 右移 signo-1 位。即除第 signo 為 "1" 之外,所有位為 0.
|= => 把 set 的第signo位置為一,其它位不變。也就是把相應(yīng)的signal加到set 中

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2009-05-10 12:26 |只看該作者
先謝過樓上的回答。
為了弄清楚這題目,我補(bǔ)了一下老譚的書里和位運(yùn)算相關(guān)的章節(jié) ,算是把這幾行代碼弄明白了   

1 << (signo-1)  => 把 “1” 右移 signo-1 位。即除第 signo 為 "1" 之外,所有位為 0.          //糾正:這句有誤,是左移才對(duì)

*set |= 1 << (signo-1) ;            //按位或:兩個(gè)相應(yīng)的二進(jìn)位中只要有一個(gè)為1,該位的結(jié)果值就為1。這里就是打開信號(hào)集*set中的某一位(將該位設(shè)置為1)

摘自APUE里的原話:因?yàn)闆]有編號(hào)為0的信號(hào),所以從信號(hào)編號(hào)中減去1以得到要處理位的位編號(hào)數(shù)。   //我原先不明白為什么用signo-1,仔細(xì)看了這句話才明白過來



遺留問題:還是不知道NSIG是什么值,沒搜出來,大家不妨也搜一下。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP