jues

kde卡死情况

以前都是追求速度,使用轻量级的桌面环境,后来独立显卡安装好后,除了玩游戏,其它的好像大材小用了,看了下gentoo官方的wiki,安装kde比其它的桌面简单多了,很多东西都集成安装了。就一条命令.

emerge -avt kde-meta

使用过一切还好,有些头痛的问题,就是有时候会卡死。

(1) 声卡冲突。

这个卡死问题,真太痛苦了,要死不死的,启动程序会很慢,声音有时有,有时无,还不能同时播放两个声音,后来查了发现是冲突问题。

 在 /etc/portage/make.conf 中修改USE

 USE="... -pulseaudio"

然后编译

emerge --ask --changed-use --deep @world

(2) fcitx配置问题。

这个问题现象太奇怪了,用默认的kde配置没有问题,一切好像正常,但如果在窗口装饰中用了新获取的装饰,那启动后,进入桌面,

一切好像也正常,但随便打开一个有标题的窗口,那马上会卡死,除了鼠标一切暂停了。只好切换到终端关闭。

配置以下文件 当前主目录下的 .xprofile 文件

export XMODIFIERS=@im=fcitx 
export GTK_IM_MODULE=fcitx 
export QT_IM_MODULE=fcitx

(3) 笔记本鼠标触摸板问题

这个不算卡死问题,但一般用笔记本的人,触摸板和触摸板上的相应鼠标的滑轮用不了,那也是很痛苦的事。

在Xfce4桌面时用自带工具配置下就好了,但在kde下显然不是这样,至少我还没有发现。

解决方法,配置显卡配置文件: /etc/X11/xorg.conf

在文件后面追加以下内容

Section "InputClass"
       Identifier "touchpad catchall"
       Driver "synaptics" MatchIsTouchpad "on"
       MatchDevicePath "/dev/input/event*"
       Option "TapButton1" "1"
       Option "TapButton2" "2"
       Option "TapButton3" "3"
       Option "HorizEdgeScroll" "true"
       Option "VertEdgeScroll" "true"
EndSection

 

 

插入算法



int insertData( int data[],int first,int last  )
{
    int i1,i2,res;

    if ( first >= last )
        return 0;

    res = 0 ;
    for ( i1 = first + 1; last >= i1;i1++ )
    {
        int swap = data[ i1 ];

        for( i2=i1 - 1;( first <= i2 ) &&( swap < data[ i2 ] ) ;i2-- )
        {
            data[ i2 + 1 ] = data[ i2 ];
        }
        data[ i2 + 1 ] = swap;
        res++;
    }

    return res;
}


int insertData2( int *data,int len  )
{
    int res = 0;
    int i1,i2;

    if ( 0 == data )
        return 0;

    for ( i1 = 1;len > i1;i1++ )
    {
        int swap = *( data + i1 );

        for ( i2 = i1 - 1;( 0 <= i2 ) && ( swap > *( data + i2 ) );i2-- )
        {
            *( data + i2 + 1 ) = *( data + i2 );
        }
        *( data + i2 + 1 ) = swap;
        res++;
    }
    
    return res;
}

void main()
{
    int data[] = { 100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81 };
    int res;
    /**/
    /* 都是插入排序,其中一个用指针方式 */
    /* 从小到大排序 */
     res = insertData( data,0,sizeof( data ) / sizeof( data[ 0 ] ) );
    /* 从大到小排序 */
     res = insertData2( data,sizeof( data ) / sizeof( data[ 0 ] ) );

}

冒泡算法

void main()
{
	int data[] = { 10,31,5,60,100,200,50 };
	int i1,i2,size;
//
	size = sizeof( data ) / sizeof( data[ 0 ] );

	for ( i1 = 0;size > i1;i1++ )
	{
		for ( i2 = i1;size > i2;i2++ )
		{
			if ( data[ i1 ] < data[ i2 ] )
			{
				int swap = data[ i1 ];
				data[ i1 ] = data[ i2 ];
				data[ i2 ] = swap;
			}
		}
	}	
}

SQL语句中的内联和外联

联接可分为以下几类:    
   
  内联接(典型的联接运算,使用像   =   或   <>   之类的比较运算符)。包括相等联接和自然联接。    
  内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索   students   和   courses   表中学生标识号相同的所有行。  
   
  外联接。外联接可以是左向外联接、右向外联接或完整外部联接。    
  在   FROM   子句中指定外联接时,可以由下列几组关键字中的一组指定:  
   
  LEFT   JOIN   或   LEFT   OUTER   JOIN。    
  左向外联接的结果集包括   LEFT   OUTER   子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。  
   
  RIGHT   JOIN   或   RIGHT   OUTER   JOIN。    
  右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。  
   
  FULL   JOIN   或   FULL   OUTER   JOIN。    
  完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。  
   
  交叉联接。    
  交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。  
   
  例如,下面的内联接检索与某个出版商居住在相同州和城市的作者:  
   
  USE   pubs  
  SELECT   a.au_fname,   a.au_lname,   p.pub_name  
  FROM   authors   AS   a   INNER   JOIN   publishers   AS   p  
        ON   a.city   =   p.city  
        AND   a.state   =   p.state  
  ORDER   BY   a.au_lname   ASC,   a.au_fname   ASC  
   
  FROM   子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。    
   
   
   
   
  例子:  
  a表     id   name         b表     id   job   parent_id   
          1   张3                   1     23     1   
          2   李四                  2     34     2   
          3   王武                  3     34     4  
   
  a.id同parent_id   存在关系  
   
  内连接  
  select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id  
   
  结果是    
  1   张3        1     23     1  
  2   李四       2     34     2  
   
  左连接  
   
  select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id  
   
  结果是    
  1   张3         1     23     1  
  2   李四        2     34     2  
  3   王武        null  
  右连接  
  select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id  
   
  结果是    
  1   张3         1     23     1  
  2   李四        2     34     2  
  null            3     34     4  
   
  完全连接  
   
  select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id  
   
   
  结果是    
  1   张3          1     23     1  
  2   李四          2     34     2  
  null             3     34     4  
  3   王武                 null

 

摘于:http://blog.csdn.net/zfrong/article/details/4301339

Linux下查看文件权限、修改文件权限的方法

查看权限命令
查看目录的相关权限可以采用命令ls -lD,或者直接用ls -la

ls -l www.jb51.net  //这里表示查看www.jb51.net目录
 
修改权限命令

chmod 777 文件名

1.chmod 577 /home/stuser -R
2.umask -p 0200
3.chown XXXX YYYY (XXXX 为用户名 YYYY为文件名)
 
权限列表

-rw-------   (600) 只有所有者才有读和写的权限
-rw-r--r--   (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------   (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x   (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x   (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw-   (666) 每个人都有读写的权限
-rwxrwxrwx   (777) 每个人都有读写和执行的权限

 

摘于: http://www.jb51.net/LINUXjishu/68740.html

解决KDE下触摸板功能不全问题

编辑 /etc/X11/xorg.conf.d/50-synaptics.conf 或 /etc/X11/xorg.conf 文件

 

    Section "InputClass"
       Identifier "touchpad catchall"
       Driver "synaptics" MatchIsTouchpad "on"
       MatchDevicePath "/dev/input/event*"
       Option "TapButton1" "1"
       Option "TapButton2" "2"
       Option "TapButton3" "3"
       Option "HorizEdgeScroll" "true"
       Option "VertEdgeScroll" "true"
    EndSection

MTK设置闹钟

格式:“时间#周期”

周期格式:

1,2,3,4,5,6,7分别代表周一到周七,

如果选择了周三和周四,就“09:30#34”,

每天都响,就“09:30#1234567”,

只响一次就“09:30#0”

 

/* 设置闹钟 */
void my_easy_set_alarm_clock( U8 i,alm_nvram_struct  *p  )
{
	srv_alm_write( i,p );
	AlmActivateIndicator();
}

/*****************************************************************************
 * FUNCTION
 *  pow
 * DESCRIPTION
 *  
 * PARAMETERS
 *  base        [IN]        
 *  index       [IN]        
 * RETURNS
 *  
 *****************************************************************************/
int my_pow(int base, int index)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    int i, ret = 1;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    for (i = 0; i < index; i++)
    {
        ret = ret * base;
    }
    return ret;
}


/*  根据指令直接修改系统闹钟*/
void my_set_alarm_clock( U8 index,const char *str )
{
	const int max = 13;
	int len;
	int i = 6;
	int num;
	alm_nvram_struct *p;

	if (  NULL == str  )
		return;

	len = strlen( str );
	
	if ( 7 > len  || NUM_OF_ALM <= index ) 
		return;/* 不是有效数据 */

	p = ( alm_nvram_struct *)srv_alm_read( index );
	/*时间*/
       p->Hour = 10 * ( str[ 0 ] - 48 ) + ( str[ 1 ] - 48 ) ;
       p->Min = 10 * ( str[ 3 ] - 48 ) + ( str[ 4 ] - 48 );

	if ( 24 <= p->Hour || 59 <  p->Min  )
		return; /* 时间无效 */
	
	p->Snooze = 0;
	p->SnoozeInterval = 0;
	/* 周期 */
	p->Freq = 4; /* 53 和50D 不一样 */
	p->Days = 0;	
	while ( 0 != str[ i ] && max > i )
	{
		num = ( int )str[ i ] - 48;
		if ( 0 <= num && 7 >= num )
		{
			if ( 0 == num )
			{ p->Days |= 0; 
			}
			else
			{
			    if ( 7 == num )
				  num = 1;
				else
				  num += 1;
				p->Days |= my_pow( 2,num - 1 );
			}
		}
		else
		{ /* 数据无效 */
			return;
		}
		i++;
	}
	if ( 0 ==  p->Days  )
		p->Freq = 1;/* 53 和50D 不一样 */
	/*开关*/
	p->State = 1;
	/* 保存生效 */
	my_easy_set_alarm_clock( index,p );
}

MTK 发送短信

MTK 53,50D 测试通过,主要代码摘于网上,自己也整理下,由于太久具体忘了在什么地方找到的,请原作者见谅,如知道请告知,一定加上连接。

/*mobileNo:电话号码,mobileNoLen:号码长度
smsMsg:短信内容,smsMsgLen:短信内容长度
simid: 双卡情况下0为主卡,1为副卡
*/

#ifndef __MMI_DUAL_SIM_MASTER__
void my_send_sms(S8 mobileNo[], U32 mobileNoLen, U8 smsMsg[], U32 smsMsgLen)
#else
void my_send_sms(S8 mobileNo[], U32 mobileNoLen, U8 smsMsg[], U32 smsMsgLen, U8 simid)
#endif
{
	
#if 1
	MMI_FRM_SMS_SEND_MSG_REQ_STRUCT *sendSms;
	S32 nsize = 0;
	
	/**/
	nsize = mmi_ucs2strlen((S8*)smsMsg)*2;
	sendSms = (MMI_FRM_SMS_SEND_MSG_REQ_STRUCT*) OslConstructDataPtr(sizeof(*sendSms));
	memset(sendSms,0,sizeof(sizeof(*sendSms)));
	
	sendSms->ref_count = 1;
	sendSms->msg_len = sizeof(mmi_sms_send_msg_req_struct);
	sendSms->profile = 0;
	sendSms->reply_index = 0xffff;	
	mmi_frm_sms_convert_ascii_num_to_l4_num(&sendSms->dest,(U8*)mobileNo);
	sendSms->para = 0;
	
	memset((S8*)sendSms->sc_addr.number, 0xff, MAX_CC_ADDR_LEN);
	sendSms->sc_addr.length = 0xff;
	sendSms->sc_addr.type = 0xff;
	sendSms->vp = 0xff;
	sendSms->pid = 0xff;
	sendSms->udhi = 0;
	
	sendSms->dcs = SMSAL_UCS2_DCS;
	sendSms->length = nsize;
	mmi_ucs2ncpy((S8*)sendSms->msg, (S8 *)smsMsg, nsize/2);
	// sendSms->length =mmi_chset_convert(MMI_CHSET_GB2312,MMI_CHSET_UCS2,(char * )sContent,(char *)sendSms->msg,sizeof(sendSms->msg));
	////////////////////////高低位字节反顺序
	{
		int i;
		kal_uint8  tmp;
		
		for(i=0;i<sendSms->length;i+=2)
		{
			tmp = sendSms->msg[i];
			sendSms->msg[i]=sendSms->msg[i+1];
			sendSms->msg[i+1]=tmp;
		}
	}	
	
#else
	mmi_sms_send_msg_req_struct *sendSms;
	sendSms = (mmi_sms_send_msg_req_struct*)OslConstructDataPtr(sizeof(*sendSms));
	sendSms->dcs = SMSAL_UCS2_DCS;
	sendSms->udhi = 0;
	sendSms->length = smsMsgLen;
	memset(sendSms->msg,0,SMSAL_MAX_MSG_LEN);
	memcpy(sendSms->msg,smsMsg,sendSms->length);
	sendSms->profile = 0;
	sendSms->para = 0;
	sendSms->reply_index = MMI_FRM_SMS_INVALID_INDEX;
	sendSms->dest.type = CSMCC_DEFAULT_ADDR_TYPE;
	memset((S8*)sendSms->dest.number,0,MAX_CC_ADDR_LEN);
	sendSms->dest.length = mobileNoLen;
	memcpy(sendSms->dest.number,mobileNo,sendSms->dest.length);
	sendSms->seq_num = 0;
	sendSms->mms_mode = 0;
	//simsp_set_sms_ProtocolEventHandler();
#endif
	
#ifndef __MMI_DUAL_SIM_MASTER__
	mmi_frm_sms_send_message(MOD_MMI,MOD_L4C,0,PRT_MSG_ID_MMI_SMS_SEND_MSG_REQ,(
		oslParaType*)sendSms,NULL);
#else//__MMI_DUAL_SIM_MASTER__
	if(simid == 0)
		
	{
		mmi_frm_sms_send_message(MOD_MMI, MOD_L4C, 0,PRT_MSG_ID_MMI_SMS_SEND_MSG_REQ, (oslParaType *)sendSms, NULL);
	}
	else
	{
		MTPNP_PFAL_Send_Message_Segment((void *)sendSms);
	}
	
#endif//__MMI_DUAL_SIM_MASTER__
	
}


/*把短信内容转换为uncode再发送*/
void my_send_sms_msg( char* sNumber,char* sContent,chset_enum src_type )
{
	
    /**/
	U8  smsMsg[ 140 * 2 ];
	U32  mobileNoLen ;
	
#ifndef WIN32
	dbg_print("\r\n*my_send_sms_msg  sNumber= %s*",sNumber );
#endif	
	/**/	 
	if ( NULL ==  sNumber  )
		return;
	
	mobileNoLen = strlen( sNumber );
	
	if ( 0 >=  mobileNoLen )
		return;
	
	mmi_chset_convert( src_type,CHSET_UCS2,
		(char*)sContent,(char*)smsMsg,sizeof( smsMsg ) );

#ifdef WIN32
	kal_print("\r\n*my_send_sms_msg  smsMsg= %s*",smsMsg );
#endif	
#ifndef __MMI_DUAL_SIM_MASTER__
	my_send_sms( sNumber,mobileNoLen,smsMsg, strlen( sContent ) * 2 );
#else
	my_send_sms( sNumber,mobileNoLen,smsMsg, strlen( sContent ) * 2,0 );
#endif /*__MMI_DUAL_SIM_MASTER__*/
	
}

 

C语言字符串向前查找

/*
逆向查找
src_str : 要查找的字符源
src_len: 源字符可以向前查找的长度
sub_str: 要查找的内容

return char* ( 成功: 查找到的位置指针,失败: NULL )
*/
char*   my_str_back_find( char* src_str,int src_len,const char* sub_str  )
{
	int sub_len;
	int i,i1;
	char *p;
	/**/
	if ( NULL == src_str || NULL == sub_str || 0 >= src_len )	
		return NULL;

	sub_len = strlen( sub_str );
	if ( 0 >= src_len )
		return NULL;

	if ( src_len < sub_len )
		return NULL;

	/* 两个字符要查找的长度相等,则直接比较 */
	if ( src_len ==  sub_len )
	{
		p = src_str - sub_len;
		if ( 0 == strcmp( p,sub_str ) )
		   return  p;
		else
		   return NULL;
	}

	/* 向前查找 */
	for ( i = 0 ; src_len > i;i++  )
	{
		p = src_str -( sub_len + i ) ;
		if ( 0 == memcmp(  p,sub_str,sub_len ) )
			return p;

	}

	return NULL;

}

MTK unix时间戳

在53,50D平台测试通过

/*utc标准时间戳转换时间( local_zone = KAL_TRUE 转换为本地时间,local_zone = KAL_FALSE为 标准时间 )*/ 
kal_bool  my_clock_utc_to_time( kal_uint32 utc, applib_time_struct *result ,const kal_bool  local_zone )
{

	if ( KAL_TRUE == local_zone )
		utc += ( ( int )( TimeZoneData[PhnsetGetHomeCity() + 1].CityTimeZone )  * 3600 );  

	return mmi_dt_utc_sec_2_mytime( utc,result,KAL_FALSE  );

} 
/*时间( local_zone = KAL_TRUE 为本地时间,local_zone = KAL_FALSE 为标准时间 ) 转换为标准时间戳*/ 
kal_uint32  my_clock_time_to_utc( applib_time_struct *result ,const kal_bool  local_zone )
{
	kal_uint32 ltz = 0;

	if ( KAL_TRUE == local_zone )
		ltz -= ( ( int )( TimeZoneData[PhnsetGetHomeCity() + 1].CityTimeZone ) * 3600 );  

	return mmi_dt_mytime_2_utc_sec( result,KAL_FALSE  ) + ltz;
}