编程心得(bug list)

1.所有的变量定义的时候请附初值
2.asp sql语句中不可以把关键字作为变量
3.交叉编译openssl

open ssl在mips和arm下的交叉编译
===========================================================
作者: softwinder(http://softwinder.itpub.net)
发表于: 2004.12.07 17:19
分类: linux编程问题
出处: http://softwinder.itpub.net/post/1093/8918
---------------------------------------------------------------

arm:
./Configure linux-elf-arm -DB_ENDIAN linux:' arm-linux-gcc -mbig-endian'
make
值得注意的是,在arm交叉编译环境中,引用库的顺序为:-lssl -lcrypto,如果为 -lcrypto -lssl就会编译错误


mips:
./Configure linux-mips -DB_ENDIAN linux:' mips-linux-gcc'
make
4.umount 不成功,一般因为设备还在使用,如果要强行umount,使用umount -l 就可以了
5.如何给linux添加新硬盘

在服务器上把硬盘接好,启动linux,以root登陆。

比如我新加一块SCSI硬盘,需要将其分成三个区:

#fdisk /dev/sdb
进入fdisk模式:
Command (m for help):p //查看新硬盘的分区
Command (m for help):n //创建新分区

可以用m命令来看fdisk命令的内部命令;n命令创建一个新分区;d命令删除一个存在的分区;p命令显示分区列表;t命令修改分区的类型ID号

;l命令显示分区ID号的列表;a命令指定启动分区;w命令是将对分区表的修改存盘让它发生作用。

Command action
   e   extended   //输入e为创建扩展分区
   p   primary partition (1-4)   //输入p为创建主分区,这里我们选择p

Partion number(1-4):1 //第一个扩展分区,按你需求可以最多分4个主分区
First Cylinder(1-1014,default 1): 1 //第一个主分区起始的磁盘块数
Last cylindet or +siza or +sizeM or +sizeK: +1024MB //可以是以MB为单位的数字或者以

磁盘块数,这里我们输入+1024MB表示分区大小为1G。

这样我们就创建完一个分区,如果要创建更多分区可以照上面的步骤继续创建。

创建完后用w保存分区。

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


这样就分区完,我们还要进行格式化

#mkfs -t ext3 -c /dev/sdb1 //如果有多个分区,则分区修改为sdb2这样


格式化完后我们需要进行挂载分区,

#mkdir www //创建/www目录,我们将把新的分区挂到www下
#mount /dev/sdb1 /www //将/dev/sdb1挂载到/www
# df //用df命令进行查看
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              3771316   1388956   2190788 39% /
/dev/sda1               101089      9463     86407 10% /boot
none                     62988         0     62988   0% /dev/shm
/dev/sdb1               485906      8239    452580   2% /www //看到了,这就是我们刚

才新挂载的分区

到这里我们工作已接近尾声了,不过我们如果这样就结束的话,我们每次重新启动服务器后都要

进行手工挂载,这样很麻烦,我们需要修改/etc/fstab文件来进行自动挂载。

#vi /etc/fstab

6.key_fun_tab.h这样的文件改变了,要make clean 了之后再重新编译


在文件的末尾填加如下内容:

/dev/sdb1               /www                    ext3    defaults        1 2


如有多个分区可修改sdb1和/www,修改完后保存,重起服务器。

到此我们添加新硬盘的工作结束了


6.网络字节序
(1).网络字节顺序
因为每一个机器内部对变量的字节存储顺序不同(有的系统是高位在前,底位在后,
而有的系统是底位在前,高位在后),而网络传输的数据大家是一定要统一顺序的。所以
对与内部字节表示顺序和网络字节顺序不同的机器,就一定要对数据进行转换(比如 IP 地
址的表示,端口号的表示)。但是内部字节顺序和网络字节顺序相同的机器该怎么办呢?
是这样的:它们也要调用转换函数,但是真正转换还是不转换是由系统函数自己来决定的。
(2).有关的转化函数
我们通常使用的有两种数据类型:短型(两个字节)和长型(四个字节)。下面介绍
的这些转换函数对于这两类的无符号整型变量都可以进行正确的转换。
如果你想将一个短型数据从主机字节顺序转换到网络字节顺序的话,有这样一个函
数:它是以“h”开头的(代表“主机”);紧跟着它的是“to”,代表“转换到”;然后是“n”
代表“网络”;最后是“s”,代表“短型数据”。H-to-n-s,就是 htons() 函数(可以使用 Host
to Network Short 来助记)
7.IP地址转换
很幸运, Linux 系统提供和很多用于转换 IP 地址的函数,使你不必自己再写出一段
费力不讨好的子程序来吃力的变换 IP。
首先,让我假设你有一个 struct sockaddr_in ina,并且你的 IP 是 166.111.69.52 ,你想
把你的 IP 存储到 ina 中。你可以使用的函数: inet_addr() ,它能够把一个用数字和点表
示 IP地址的字符串转换成一个无符号长整型。你可以像下面这样使用它:
ina.sin_addr.s_addr = inet_addr(!166.111.69.52!);
注意:
l inet_addr() 返回的地址已经是网络字节顺序了,你没有必要再去调用 htonl() 函数,是不是很
方便呢?
l 上面的用法并不是一个很好的习惯,因为上面的代码没有进行错误检查。如果 inet_addr() 函数
执行错误,它将会返回 ¨1……等等!二进制的无符号整数值 ¨1相当于什么?相当于255.255.255.255 !! 一
个广播用的IP 地址!没有办法,你只能在你自己的程序里进行对症下药的错误检查了。
好,现在我们已经可以把字符串的 IP 地址转换成长整型了。那么还有没有其他的方法
呢?如果你有一个 struct in_addr 并且你想把它代表的 IP 地址打印出来(按照 数字.数字.数
字.数字的格式)……
这里,你可以使用函数 inet_ntoa()(“ntoa”代表“Network to ASCII”):
printf(!%s!, inet_ntoa(ina.sin_addr));

6.找SRC code
whereis fdisk
rpm -qf /sbin/fdisk

7.知道文件大小
fseek(fp,0L,2);
   
file_len = ftell(fp);
   
fseek(fp,0L,0);
8.cgi错误 database
类型不对
9.同一个buf /" /" 为什么不能用?
10.
int i=0;
fprintf(stdout,"%d:%02X /n",i,recvline[i++]);
却从1开始打印?
11.if   (new_fd   =   accept(sockfd,   (struct   sockaddr   *)&their_addr,&sin_size)   ==   -1)    
这句错了。赋值符合优先级最低,导致new_fd在连接成功是为0,不成功时为1。
12.string.h找最后一个字符,strrchr,取IP,

13.html中的Label属性会导致SELECET,focus乱掉

14.fscanf 读文件时,遇到空格就不读了,所以文件内容是"1,main proc test ",fscanf(fp,"%d,%*s",count,temp),下次再读就从proc开始

15.取时间
static char dateformat[256] = "%b %e %T";   /* Original Asterisk Format */

time_t t;
struct tm tm;
char date[256];

time(&t);
localtime_r(&t, &tm);
strftime(date, sizeof(date), dateformat, &tm);
printf("%s tm_sec:%d/n",date,tm.tm_sec);

你可能感兴趣的:(编程心得(bug list))