求教大神gcc gnu 下man手册如何更新到最新版?

[复制链接]
查看11 | 回复3 | 2021-1-27 06:45:36 | 显示全部楼层 |阅读模式
求教大神gccgnu下man手册如何更新到最新版?
如题Linux环境,的Ubuntu的,gcc版本是4.8.2但我想man多线程的函数也没有相关的手册页面,那该怎么更新那个手册呢?

分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:45:36 | 显示全部楼层
多线程先把我这个例子吃透,90%的多线程问题就应该不是问题了。
//循环向a函数每次发送200个字节长度(这个是固定的)的buffer,
//a函数中需要将循环传进来的buffer,组成240字节(也是固定的)的新buffer进行处理,
//在处理的时候每次从新buffer中取两个字节打印
#ifdefWIN32
#pragmawarning(disable:4996)
#endif
#include
#include
#include
#ifdefWIN32
#include
#include
#include
#defineMYVOIDvoid
#definevsnprintf_vsnprintf
#else
#include
#include
#include
#defineCRITICAL_SECTIONpthread_mutex_t
#defineMYVOIDvoid*
#endif
//Log{
#defineMAXLOGSIZE20000000
#defineMAXLINSIZE16000
#include
#include
#include
charlogfilename1[]="MyLog1.log";
charlogfilename2[]="MyLog2.log";
staticcharlogstr[MAXLINSIZE+1];
chardatestr[16];
chartimestr[16];
charmss[4];
CRITICAL_SECTIONcs_log;
FILE*flog;
#ifdefWIN32
voidLock(CRITICAL_SECTION*l){
EnterCriticalSection(l);
}
voidUnlock(CRITICAL_SECTION*l){
LeaveCriticalSection(l);
}
voidsleep_ms(intms){
Sleep(ms);
}
#else
voidLock(CRITICAL_SECTION*l){
pthread_mutex_lock(l);
}
voidUnlock(CRITICAL_SECTION*l){
pthread_mutex_unlock(l);
}
voidsleep_ms(intms){
usleep(ms*1000);
}
#endif
voidLogV(constchar*pszFmt,va_listargp){
structtm*now;
structtimebtb;
if(NULL==pszFmt||0==pszFmt[0])return;
vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);
ftime(&tb);
now=localtime(&tb.time);
sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
sprintf(timestr,"%02d:%02d:%02d",now->tm_hour,now->tm_min,now->tm_sec);
sprintf(mss,"%03d",tb.millitm);
printf("%s%s.%s%s",datestr,timestr,mss,logstr);
flog=fopen(logfilename1,"a");
if(NULL!=flog){
fprintf(flog,"%s%s.%s%s",datestr,timestr,mss,logstr);
if(ftell(flog)>MAXLOGSIZE){
fclose(flog);
if(rename(logfilename1,logfilename2)){
remove(logfilename2);
rename(logfilename1,logfilename2);
}
}else{
fclose(flog);
}
}
}
voidLog(constchar*pszFmt,...){
va_listargp;
Lock(&cs_log);
va_start(argp,pszFmt);
LogV(pszFmt,argp);
va_end(argp);
Unlock(&cs_log);
}
//Log}
#defineASIZE200
#defineBSIZE240
#defineCSIZE2
charAbuf[ASIZE];
charCbuf[CSIZE];
CRITICAL_SECTIONcs_HEX;
CRITICAL_SECTIONcs_BBB;
structFIFO_BUFFER{
inthead;
inttail;
intsize;
chardata[BSIZE];
}BBB;
intNo_Loop=0;
voidHexDump(intcn,char*buf,intlen){
inti,j,k;
charbinstr[80];
Lock(&cs_HEX);
for(i=0;i=len){
lent=len;
if(fbuf->head+lent>BSIZE){
len1=BSIZE-fbuf->head;
memcpy(buf,fbuf->data+fbuf->head,len1);
len2=lent-len1;
memcpy(buf+len1,fbuf->data,len2);
fbuf->head=len2;
}else{
memcpy(buf,fbuf->data+fbuf->head,lent);
fbuf->head+=lent;
}
fbuf->size-=lent;
}
Unlock(cs);
returnlent;
}
MYVOIDthdB(void*pcn){
char*recv_buf;
intrecv_nbytes;
intcn;
intwc;
intpb;
cn=(int)pcn;
Log("%03dthdBthreadbegin...\n",cn);
while(1){
sleep_ms(10);
recv_buf=(char*)Cbuf;
recv_nbytes=CSIZE;
wc=0;
while(1){
pb=GetFromRBuf(cn,&cs_BBB,&BBB,recv_buf,recv_nbytes);
if(pb){
Log("%03drecv%dbytes\n",cn,pb);
HexDump(cn,recv_buf,pb);
sleep_ms(1);
}else{
sleep_ms(1000);
}
if(No_Loop)break;//
wc++;
if(wc>3600)Log("%03d%d==wc>3600!\n",cn,wc);
}
if(No_Loop)break;//
}
#ifndefWIN32
pthread_exit(NULL);
#endif
}
intPutToRBuf(intcn,CRITICAL_SECTION*cs,FIFO_BUFFER*fbuf,char*buf,intlen){
intlent,len1,len2;
Lock(cs);
lent=len;
if(fbuf->size+lent>BSIZE){
lent=BSIZE-fbuf->size;
}
if(fbuf->tail+lent>BSIZE){
len1=BSIZE-fbuf->tail;
memcpy(fbuf->data+fbuf->tail,buf,len1);
len2=lent-len1;
memcpy(fbuf->data,buf+len1,len2);
fbuf->tail=len2;
}else{
memcpy(fbuf->data+fbuf->tail,buf,lent);
fbuf->tail+=lent;
}
fbuf->size+=lent;
Unlock(cs);
returnlent;
}
MYVOIDthdA(void*pcn){
char*send_buf;
intsend_nbytes;
intcn;
intwc;
inta;
intpa;
cn=(int)pcn;
Log("%03dthdAthreadbegin...\n",cn);
a=0;
while(1){
sleep_ms(100);
memset(Abuf,a,ASIZE);
a=(a+1)%256;
if(16==a){No_Loop=1;break;}//去掉这句可以让程序一直循环直到按Ctrl+C或Ctrl+Break或当前目录下存在文件No_Loop
send_buf=(char*)Abuf;
send_nbytes=ASIZE;
Log("%03dsending%dbytes\n",cn,send_nbytes);
HexDump(cn,send_buf,send_nbytes);
wc=0;
while(1){
pa=PutToRBuf(cn,&cs_BBB,&BBB,send_buf,send_nbytes);
Log("%03dsent%dbytes\n",cn,pa);
HexDump(cn,send_buf,pa);
send_buf+=pa;
send_nbytes-=pa;
if(send_nbytes3600)Log("%03d%d==wc>3600!\n",cn,wc);
}
if(No_Loop)break;//
}
#ifndefWIN32
pthread_exit(NULL);
#endif
}
intmain(){
#ifdefWIN32
InitializeCriticalSection(&cs_log);
InitializeCriticalSection(&cs_HEX);
InitializeCriticalSection(&cs_BBB);
#else
pthread_tthreads[2];
intthreadsN;
intrc;
pthread_mutex_init(&cs_log,NULL);
pthread_mutex_init(&cs_HEX,NULL);
pthread_mutex_init(&cs_BBB,NULL);
#endif
Log("Start===========================================================\n");
BBB.head=0;
BBB.tail=0;
BBB.size=0;
#ifdefWIN32
_beginthread((void(__cdecl*)(void*))thdA,0,(void*)1);
_beginthread((void(__cdecl*)(void*))thdB,0,(void*)2);
#else
threadsN=0;
rc=pthread_create(&(threads[threadsN++]),NULL,thdA,(void*)1);if(rc)Log("%d=pthread_create%derror!\n",rc,threadsN-1);
rc=pthread_create(&(threads[threadsN++]),NULL,thdB,(void*)2);if(rc)Log("%d=pthread_create%derror!\n",rc,threadsN-1);
#endif
if(!access("No_Loop",0)){
remove("No_Loop");
if(!access("No_Loop",0)){
No_Loop=1;
}
}
while(1){
sleep_ms(1000);
if(No_Loop)break;//
if(!access("No_Loop",0)){
No_Loop=1;
}
}
sleep_ms(3000);
Log("End=============================================================\n");
#ifdefWIN32
DeleteCriticalSection(&cs_BBB);
DeleteCriticalSection(&cs_HEX);
DeleteCriticalSection(&cs_log);
#else
pthread_mutex_destroy(&cs_BBB);
pthread_mutex_destroy(&cs_HEX);
pthread_mutex_destroy(&cs_log);
#endif
return0;
}

回复

使用道具 举报

千问 | 2021-1-27 06:45:36 | 显示全部楼层
引用1楼zhao4zhong1的回复:多线程先把我这个例子吃透,90%的多线程问题就应该不是问题了。
//循环向a函数每次发送200个字节长度(这个是固定的)的buffer,
//a函数中需要将循环传进来的buffer,组成240字节(也是固定的)的新buffer进行处理,
//在处理的时候每次从新buffer中取两个字节打印

精简一下吧,用pthread_win32
回复

使用道具 举报

千问 | 2021-1-27 06:45:36 | 显示全部楼层
下更新的。
manpages-dev
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行