兴海北路

---男儿仗剑自横行
<2024年3月>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

  • 随笔 - 85
  • 文章 - 0
  • 评论 - 17
  • 引用 - 0

常用链接

留言簿(6)

随笔分类

随笔档案

收藏夹

全是知识啊

搜索

  •  

最新评论

阅读排行榜

评论排行榜

忘记mysql用户密码怎么办?

作者: falcon   发表日期: 2007-04-05 21:50   复制链接



1. stop the mysql server
$ps -ef | grep mysqld
then  kill one by one
OR
$killall -TERM mysqld

2. start the mysql server with the following command
$ /usr/bin/mysqld_safe --skip-grant-table &

3. change your password for root
mysql> use mysql;
mysql> update user set password=password("new password") where user="root";
mysql> flush privileges;
mysql> quit

4. restart the mysql server with normal mode
/etc/init.d/mysql restart

转自:
http://www.cndw.com/tech/data/2006050864444.asp
有改动

posted @ 2008-03-14 16:08 随意门 阅读(206) | 评论 (0)编辑 收藏
用mysqldump备份和恢复指定表

作者: falcon   发表日期: 2007-03-05 17:03   复制链接



备份
Quote:

mysqldump -u user -p db tab1 tab2 > db.sql



恢复
Quote:

mysql -u user -p db < db.sql



参考资料:

备份/恢复
http://hi.baidu.com/hecheng/blog/item/e0d5b31c2e24a88b87d6b643.html

posted @ 2008-03-14 16:07 随意门 阅读(824) | 评论 (0)编辑 收藏
自动备份mysql数据库

作者: falcon   发表日期: 2007-04-18 11:00   复制链接



如果管理过数据库,你就会发现手工备份数据库是个非常糟糕的事情。如果能够按照一定的策略自动备份,可能会是个不错的选择。

就mysql 来说,我们可以通过copy数据库文件和mysqldump两种方式来实现备份,这里我们通过直接copy数据库文件来进行备份(这种方式在不同的 mysql版本之间备份和恢复可能会存在问题,需要注意,当然mysqldump也会出一些问题,但是没有前者严重)。

下面介绍具体的备份方法:

先写一个实现自动备份的脚本(建议引入一些参数,提高灵活性):


Code:

[Ctrl+A Select All]



*这里的备份策略是:保留两周内备份的数据,备份的数据库名字包含日期信息

然后把上面的脚本作为cron的任务
> su
> crontab -e
4 4 * * 1 /bin/backup.sh 2>/var/log/backup.log

*这里的备份策略是:每周的周一的4点4分备份一次

这个样子就实现了每周备份一次,并保留两周内备份的数据。

posted @ 2008-03-14 16:06 随意门 阅读(378) | 评论 (0)编辑 收藏
获取IP地址函数(本地、域名转换)

作者: falcon   发表日期: 2006-09-27 15:27   复制链接



 前些天由于项目需要,自己整了一个比较全面的获取IP地址的函数:
  可以获取本地的IP地址,也可以根据域名获取IP地址,感觉比较有用特此奉献上,呵呵。

  下面是源代码


Code:

[Ctrl+A Select All]


  下面是一个测试的代码
test_GetIp.c


Code:

[Ctrl+A Select All]



  具体使用演示
引文:

$./test_GetIp xxxy.lzu.edu.cn --这里是根据域名转换为IP地址
domain name or ip address : xxxy.lzu.edu.cn
current ip address: 202.201.0.237

$ ./test_GetIp 219.246.79.7 --输入地址返回地址
domain name or ip address : 219.246.79.7
current ip address: 219.246.79.7

$ ./test_GetIp localhost  --获取本地IP地址
domain name or ip address : localhost
current ip address: 219.246.79.4

posted @ 2008-03-14 16:05 随意门 阅读(4205) | 评论 (0)编辑 收藏
匿名FTP站点扫描C语言源代码

作者: falcon   发表日期: 2006-08-22 09:21   复制链接



经过几天的调试和修改,比较稳定的匿名ftp站点扫描工具终于完成拉。
该扫描工具可以扫描指定IP段的ftp站点,大家可以把它改写来扫描其他的端口。甚至基于此结构写一个ftp搜索引擎的爬虫。过段时间,我再把爬虫的代码公布出来,暂时正在调试和修改中。

这些天弄得很累,呵呵,暂时只把源代码弄上来。有时间再做详细的解释。有问题在后面跟帖哦。

ftp扫描的核心代码:ffs.c


Code:

[Ctrl+A Select All]



自动扫描多个IP段的脚本: affs


Code:

[Ctrl+A Select All]



这个可以用来终止上面的扫描过程: kffs


Code:

[Ctrl+A Select All]



下面是兰大校园网内的IP段: ftpinfo.txt
Quote:

202.201.0.0 202.201.15.255;210.26.48.0 210.26.63.255;219.246.32.0 219.246.95.255;219.246.176.0 219.246.191.255;222.23.48.0 222.23.63.255;202.38.127.176 202.38.127.191;202.38.126.224 202.38.126.255


注意,每个段之间用分号分开哦,因为在affs脚本里头用到了这个分割符号。

下面这个可以在扫描过后的日志里头提取出ip地址: logtoip


Code:

[Ctrl+A Select All]




具体使用演示:

只用 ffs
Quote:

falcon@falcon:~/program/c/code/ftp/socket$ gcc -lpthread -o ffs ffs.c
falcon@falcon:~/program/c/code/ftp/socket$ ./ffs 219.246.183.222 219.246.183.222
startIp = 219.246.183.222,3690379230
endIp = 219.246.183.222,3690379230
thread 0 create successed!
currentIp = 3690379230  219.246.183.222
220 Microsoft FTP Service
331 Anonymous access allowed, send identity (e-mail name) as password.
230 Anonymous user logged in.
221
<can login: 219.246.183.222>
Thread 0 down
Finish!




用 affs

Quote:

falcon@falcon:~/program/c/code/ftp/socket$ ./affs ftpinfo.txt fs.log
start time:2006年 08月 21日 星期一 21:38:01 CST
is scaning...



正在扫描,结束以后,我们可以获得扫描的一个日志文件fs.log

用logtofile脚本提取可以访问的ip地址
Quote:

falcon@falcon:~/program/c/code/ftp/socket$ ./logtoip fs.log
202.201.0.237
202.201.0.243
202.201.1.126
202.201.3.82
202.201.3.99
202.201.6.125
202.201.7.17
202.201.8.125
202.201.13.65
202.201.13.118
202.201.13.139
202.201.13.149



最好,要是想结束扫描的话,用 kffs脚本
Quote:

falcon@falcon:~/program/c/code/ftp/socket$ ./kffs
do you want to kill all ftp scan process?(y or n): y
杀死



另外,要是你想把你的测试结果发布,可以在日志里头提取出ip地址并放到html文件里头。下面是这么一个脚本:logtohtml


Code:

[Ctrl+A Select All]



为了让系统自动扫描所有的IP段,并保存为html文件发布出去,那么我们可以这么做。再写个脚本 updateftp,(把affs 和logtohtml放在同一目录下哦,还有updateftp也是)


Code:

[Ctrl+A Select All]



如果再加上crontab,我们就可以让系统自动扫描拉
Quote:

$crontab -e
00 12 * * * path/to/updateftp



ok,好啦
这里是演示的最终结果:
http://mirror.lzu.edu.cn/newftp/index.html

经过测试,扫描整个兰大校园网内的IP段,大概需要15钟左右。

对拉,需要提到的是,在用脚本的时候,记得先修改成可执行的哦,如:
Quote:

$chmod 755 path/to/shellscriptfile



参考资料太多拉,这里暂时不列举出来哦
翻了一大堆关于套接字和多线程编程的资料。我在其他的几个帖子里头贴出了其中的一些参考资料。

posted @ 2008-03-14 16:04 随意门 阅读(915) | 评论 (-4)编辑 收藏
linux下C语言多线程编程实例

作者: falcon   发表日期: 2006-08-19 08:36   复制链接



学东西,往往实例才是最让人感兴趣的,老是学基础理论,不动手,感觉没有成就感,呵呵。

下面先来一个实例。我们通过创建两个线程来实现对一个数的递加。
或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉。

下面是我们的代码:


Code:

[Ctrl+A Select All]




下面我们先来编译、执行一下

Quote:

  falcon@falcon:~/program/c/code/ftp$ gcc -lpthread -o thread_example thread_example.c
  falcon@falcon:~/program/c/code/ftp$ ./thread_example
  我是主函数哦,我正在创建线程,呵呵
  线程1被创建
  线程2被创建
  我是主函数哦,我正在等待线程完成任务阿,呵呵
  thread1 : I'm thread 1
  thread1 : number = 0
  thread2 : I'm thread 2
  thread2 : number = 1
  thread1 : number = 2
  thread2 : number = 3
  thread1 : number = 4
  thread2 : number = 5
  thread1 : number = 6
  thread1 : number = 7
  thread2 : number = 8
  thread1 : number = 9
  thread2 : number = 10
  thread1 :主函数在等我完成任务吗?
  线程1已经结束
  thread2 :主函数在等我完成任务吗?
  线程2已经结束





实例代码里头的注释应该比较清楚了吧,下面我把网路上介绍上面涉及到的几个函数和变量给引用过来。


Quote:


  线程相关操作

  一 pthread_t

  pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:
    typedef unsigned long int pthread_t;
    它是一个线程的标识符。

  二 pthread_create

  函数pthread_create用来创建一个线程,它的原型为:
    extern int pthread_create __P ((pthread_t *__thread, __const pthread_attr_t *__attr,
    void *(*__start_routine) (void *), void *__arg));
  第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。这里,我们的 函数thread不需要参数,所以最后一个参数设为空指针。第二个参数我们也设为空指针,这样将生成默认属性的线程。对线程属性的设定和修改我们将在下一 节阐述。当创建线程成功时,函数返回0,若不为0则说明创建线程失败,常见的错误返回代码为EAGAIN和EINVAL。前者表示系统限制创建新的线程, 例如线程数目过多了;后者表示第二个参数代表的线程属性值非法。创建线程成功后,新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一 行代码。

  三 pthread_join pthread_exit
    
  函数pthread_join用来等待一个线程的结束。函数原型为:
    extern int pthread_join __P ((pthread_t __th, void **__thread_return));
  第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数 将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。一个线程的结束有两种途径,一种是象我们上面的例子一样,函数结束了,调用它 的线程也就结束了;另一种方式是通过函数pthread_exit来实现。它的函数原型为:
    extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__));
    唯一的参数是函数的返回代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将被传递给 thread_return。最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线 程则返回错误代码ESRCH。
    在这一节里,我们编写了一个最简单的线程,并掌握了最常用的三个函数pthread_create,pthread_join和pthread_exit。下面,我们来了解线程的一些常用属性以及如何设置这些属性。


  互斥锁相关

  互斥锁用来保证一段时间内只有一个线程在执行一段代码。

  一 pthread_mutex_init

  函数pthread_mutex_init用来生成一个互斥锁。NULL参数表明使用默认属性。如果需要声明特定属性的互斥锁,须调用函数 pthread_mutexattr_init。函数pthread_mutexattr_setpshared和函数 pthread_mutexattr_settype用来设置互斥锁属性。前一个函数设置属性pshared,它有两个取值, PTHREAD_PROCESS_PRIVATE和PTHREAD_PROCESS_SHARED。前者用来不同进程中的线程同步,后者用于同步本进程的 不同线程。在上面的例子中,我们使用的是默认属性PTHREAD_PROCESS_ PRIVATE。后者用来设置互斥锁类型,可选的类型有PTHREAD_MUTEX_NORMAL、PTHREAD_MUTEX_ERRORCHECK、 PTHREAD_MUTEX_RECURSIVE和PTHREAD _MUTEX_DEFAULT。它们分别定义了不同的上所、解锁机制,一般情况下,选用最后一个默认属性。

  二 pthread_mutex_lock pthread_mutex_unlock pthread_delay_np

  pthread_mutex_lock声明开始用互斥锁上锁,此后的代码直至调用pthread_mutex_unlock为止,均被上锁,即同一时间只 能被一个线程调用执行。当一个线程执行到pthread_mutex_lock处时,如果该锁此时被另一个线程使用,那此线程被阻塞,即程序将等待到另一 个线程释放此互斥锁。




注意:

需 要说明的是,上面的两处 sleep不光是为了演示的需要,也是为了让线程睡眠一段时间,让线程释放互斥锁,等待另一个线程使用此锁。下面的参考资料1里头说明了该问题。但是在 linux下好像没有pthread_delay_np那个函数(我试了一下,提示没有定义该函数的引用),所以我用了sleep来代替,不过参考资料2 中给出另一种方法,好像是通过pthread_cond_timedwait来代替,里头给出了一种实现的办法。


参考资料:

1。Linux下的多线程编程
http://linux.chinaunix.net/doc/program/2001-08-11/642.shtml
2。pthread_delay_np
http://bbs.chinaunix.net/archiver/?tid-584593.html

posted @ 2008-03-14 16:03 随意门 阅读(684) | 评论 (0)编辑 收藏
linux下c语言多进程编程

作者: falcon   发表日期: 2006-07-14 16:49   复制链接



多进程编程是作为程序员必须熟悉的一个东西哦

下面,我们在linux用系统的fork调用来实现多进程编程练习

先看代码吧



Code:

[Ctrl+A Select All]



再来看看效果

Quote:

falcon@falcon:~/program/c/code/process$ gcc -o mul_pro_myself mul_pro_myself.c
falcon@falcon:~/program/c/code/process$ ./mul_pro_myself
I am the child :32063
child_pro: 0
I'm the parent :32062
parent_pro: 0
child_pro: 1
parent_pro: -1
child_pro: 2
child_pro: 3
parent_pro: -2
child_pro: 4
parent_pro: -3
Child exit with:5
Who am I :5
parent_pro: -4
Parent exit with:-5
Who am I :-5



看到上面的代码,结合上面的实验结果,我们有个疑问: Who am I? i的值到底是什么呢?

以我们平常的经验,变量i在整个程序里头只可能有一个副本,也就是说在任何一个状态,他的值是唯一的。

但是我们从上面的实验结果可以看出,在多进程的程序里头,情况就不再是这个样子,在不同的进程中保存了不同的副本。

好玩不?

如果对程序有疑问,欢迎查看下面的参考资料哦,非常不错的资料


参考资料:
《linux操作系统下c语言编程入门 》
http://www.mwjx.com/aboutfish/private/book/linux_c.txt

posted @ 2008-03-14 16:03 随意门 阅读(1653) | 评论 (0)编辑 收藏
用c写个大数求和的程序

作者: falcon   发表日期: 2006-05-31 18:46   复制链接



先说一下思路哦:

1)先从键盘屏幕接收两个大数,按字符串存放到字符数组中。
2)
初始化进位为0
然后从两个字符数组中分别取出最后一个字符(数字)开始来求和
一直求和到字符串长度较小的最小下标处停止
结果保存较大数字所存放的字符数组中
(说明:
如果结果大于106,那么结果减去58存入,并记录进位为1
否则,结果减去48存入,并记录进位为0

3)如果两个数字的位数不相同,那么需要求出最后一位可能的进位
比如5+96=101
4)进位为1,那么和之前需要输出一个1
5)输出两个大数的和

下面是具体代码


Code:

[Ctrl+A Select All]



补充:在ubuntu下用gcc编译通过
部分演示结果

falcon@falcon:~/program/c/code/mylove$ gcc -o add_LN add_LN.c
falcon@falcon:~/program/c/code/mylove$ ./add_LN
Please input two Large Number less than 10000 bit
5
6
两数之和为:
11
falcon@falcon:~/program/c/code/mylove$ ./add_LN
Please input two Large Number less than 10000 bit
877848515165484151
996527784841515184
两数之和为:
1874376300006999335
falcon@falcon:~/program/c/code/mylove$ ./add_LN
Please input two Large Number less than 10000 bit
8995951
784784987951252178485215254798749874984185416845865215187484520512
两数之和为:
784784987951252178485215254798749874984185416845865215187493516463
falcon@falcon:~/program/c/code/mylove$ ./add_LN
Please input two Large Number less than 10000 bit
5
96
两数之和为:
101

guest 发表于 2007-11-20 23:38
#2

你的C语言代码有点小错误!就是在那段:
    if(equal==0)
    {
        Temp=LN[flag1][LN_Len[flag1]+i]+jw;
        if(Temp>=58)
        {
              jw=1;
              LN[flag1][LN_Len[flag1]+i]=Temp-10;
        }
        else
        {
              jw=0;
              LN[flag1][LN_Len[flag1]+i]=Temp;
        }
                 
    }

缺少了对一直有进位即JW=1时候的累加!应该加上个while循环:
    if(equal==0)
    {
              while(j>0 && jw==1)
              {
        Temp=LN[flag1][j+i]+jw;
        if(Temp>=58)
        {
              jw=1;
              LN[flag1][j+i]=Temp-10;
        }
        else
        {
              jw=0;
              LN[flag1][j+i]=Temp;
        }
                 j--;
              }

并且初始j=LN_Len[flag1]

欢迎访问blog.sina.com.cn/Fanmcgrady与我交流!呵呵~~谢谢你的帮助!

posted @ 2008-03-14 16:02 随意门 阅读(529) | 评论 (0)编辑 收藏
如何用VC编写DLL动态链接库文件?

作者: falcon   发表日期: 2006-04-24 14:51   复制链接



引言

前不久刚学会了如何用VB编写DLL动态链接库,但是用vb编写动态链接库比较麻烦些。下面我们再学习一下如何用vc编写dll动态链接库,并且通过vc或者vb调用

正文

这里主要介绍两个东东
第一:用vc编写动态链接库,用vc调用
第二:用vb编写动态链接库,用vb调用

一、用vc编写动态链接库,用vc调用

1、创建DLL文件,命名为FIRSTDLL

1)打开visual c++ 6.0通过new创建一个win30 Dynamic-link Libary的工程,命名为FIRSTDLL
2)接着选择最后一个选项,让系统帮我们创建一些必要的文件
3)把FIRSTDLL.cpp用下面的代码覆盖


Code:

[Ctrl+A Select All]


4)接着我们在FIRSTDLL.h头文件里头用下面的代码覆盖


Code:

[Ctrl+A Select All]


5)好拉,我们现在可以编译FIRSTDLL.cpp文件拉,到debug目录下看看,是不是已经生成拉我们需要的FIRSTDLL.dll拉

2、通过vb编写一个函数来调用该DLL,该函数为USEFIRSTDLL

1)同样通过new创建一个工程,该工程为win30 application,命名USEFIRSTDLL
2)在USEFIRSTDLL.cpp文件中用如下代码覆盖


Code:

[Ctrl+A Select All]



好拉,到这里第一部分介绍完拉
下面介绍第二部分


二、用vc编写动态链接库,用vb调用

在介绍这个之前必须声明的是(引用自下面的参考资料)

一个DLL中的函数要想被VB调用,必须满足两个条件:一是调用方式为stdcall,另一个是必须是export的。要做到第一条,只须在函数声明前加上__stdcall关键字。如:
  short __stdcall sample(short nLen, short *buffer)
  要做到第二条,需要在*.def文件中加上如下的几行:
  EXPORTS
  sample @1
  这里的sample是你要在VB中调用的函数名,@1表示该函数在DLL中的编号,每个函数都不一样。注意这里的函数名是区分大小写的。


1、下面我们类似一创建名为SecondDll的DLL文件

1)创建SecondDll,代码如下:


Code:

[Ctrl+A Select All]



2)往我们的工程里头添加一个SecondDll.def文件,内容如下


Code:

[Ctrl+A Select All]


解释一下哦:
@1是表示Max函数在DLL中函数组中是第一个函数,具体见参考资料

ok,保存
编译、创建我们的SecondDll.dll

2、通过Vb调用SecondDll.dll文件,来求两个数中的最大者

我们直接 编写一段代码如下哦


Code:

[Ctrl+A Select All]


看到效果没有啊,在我们的窗体标题中显示拉:"最大值是9"

到这里我们的工作接结束拉,不过要熟练掌握还得多编写程序拉,下面是我在学习时的参考资料,非常详细哦。
在这里,我真的是要谢谢那些专家们为我们免费提供了这么多参考资料,大家要好好珍惜才是,呵呵。


参考资料:
1)基于Visual C++6.0的DLL编程实现 http://hegeng2000.blogchina.com/3807138.html
2)VB和VC混合编程 http://www.china-askpro.com/msg1/qa72.shtml

posted @ 2008-03-14 16:00 随意门 阅读(1713) | 评论 (0)编辑 收藏
linux下网络编程学习——入门实例

作者: falcon   发表日期: 2006-04-14 09:54   复制链接



是不是还对用c怎么实现网络编程感到神秘莫测阿,我们这里就要撕开它神秘的面纱,呵呵。

一起来:

诶,不要着急,我们先来介绍一些网络程序的主要执行过程,主要是便于大家更好的理解下面的程序实例哦 :

1)系统启动服务器执行。服务器完成一些初始化操作,然后进入睡眠状态,等待客户机请求。
2)在网络的某台机器上,用户执行客户机程序
3)客户机进行与服务器进程建立一条连接
4)连接建立后,客户机通过网路向服务器发出请求,请求某种服务。
5)服务器接收到客户机的请求后,根据客户机请求的内容进行相应的处理,然后将处理结果返回。
6)服务器断开与客户机的连接,继续睡眠,等待其他客户机的请求。

现在介绍一个实例

功能:实现简单的服务器-客户机编程,客户机发送连接请求后接受到连接成功信息。
代码包括两部分,服务器部分(service.c)和客户机部分(client.c)



Code:

[Ctrl+A Select All]




Code:

[Ctrl+A Select All]



下面我们来编译执行看看效果哦

编译:
#gcc -o service service.c
#gcc -o client client.c
修改执行权限
#chmod 770 service
#chmod 770 client
执行
现执行服务器端哦
#./service
另开一个命令行窗口,连接服务器的3490端口
#./client localhost
呵呵,看到效果了吧
服务器端:

server: got connection from 127.0.0.1

客户端

read: Hello,Network!

[注:以上程序在mandriva linux 2006下调试通过]

从此踏上linux下的网络编程之路,祝贺你一帆风顺...
Good Luck,Babies

posted @ 2008-03-14 15:59 随意门 阅读(4714) | 评论 (0)编辑 收藏
仅列出标题
共9页: 1 2 3 4 5 6 7 8 9