平时积攒下来的东东

平时积攒下来的东东,

#ifdef HP_UNIX
  #pragma pack  1
#elif defined(AIX)
  #pragma options align=packed
#elif defined(_WIN32)
  #pragma pack(push,1)
#else
  #pragma pack(1)
#endif

或者

gcc -fpack-struct server.c在编译时加上-fpack-struct参数来压缩"空"的部分

原来是内存对齐用的, 基本的意思就是以1字节来对齐, 而不会出现在结构中以大的字节来对齐的情况
------------------------------------------------------------------------------

关于makefile的, 有感而加注释
include $(ORACLE_HOME)/rdbms/lib/env_rdbms.mk   #makefile的伪指令, env_rdbms.mk文件包含了make的规则
CC=`/bin/sh ./getopts.sh compiler`    #没啥用

COMMONLIBS=`/bin/sh ./getopts.sh options`   #是 -lnsl -lsocket -ldl ???
NONDEFER=false
#新发现, 在INCLUDE中加上-DLINUX 相当于在程序中写上#define LINUX, 但是加在LDFLAGS中是不对的, 不知为什么???
INCLUDE= -I$(ORACLE_HOME)/rdbms/demo -I$(ORACLE_HOME)/rdbms/public -I$(ORACLE_HO #-I是包含了.h文件啊
ME)/plsql/public -I$(ORACLE_HOME)/network/public
LDFLAGS=-L. -L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib -L$(ORACLE_HOME)/lib #-L是包含了.a库文件
 -L$(ORACLE_HOME)/network/lib -L/usr/lib -L/usr/local/lib
OCISHAREDLIBS=$(LLIBCLNTSH) ${COMMONLIBS}   #LLIBCLNTSH是在env_rdbms.mk里定义的
OCISTATICLIBS=$(STATICTTLIBS) $(LLIBTHREAD) ${COMMONLIBS} #STATICTTLIBS、LLIBTHREAD同上

CC=gcc

#COMPILE.C= ${ECHODO} $(CC) $(INCLUDE) -c
COMPILE.C= $(CC) $(INCLUDE) -c     #编译时是会用到.h头文件的
#MAKEEXE= ${ECHODO} $(CC) $(LDFLAGS) $(OCISHAREDLIBS)
MAKEEXE= $(CC) $(LDFLAGS) $(OCISHAREDLIBS) -lmd5  #形成可执行文件时是要用到库文件.a文件的

.SUFFIXES: .o .cob .for .c     #.SUFFIXES是特殊目标的一种, 具体见Makefile使用说明文档
        #后缀规则是干什么啊???
EXE1=ljscdmain
EXE2=ljclient

OBJ=main.o tools.o comm.o OracleDB.o BusiProc.o mml_apiex.o MscTellin.o idea.o

all:    $(EXE2)

$(EXE1):                $(OBJ)
                $(MAKEEXE) $(OBJ) -o $(EXE1)
$(EXE2):                $(OBJ)
                $(MAKEEXE) $(OBJ) -o $(EXE2)
main.o:         main.h main.c
                $(COMPILE.C) main.c
tools.o:        tools.h tools.c
                $(COMPILE.C) tools.c
OracleDB.o:     OracleDB.h OracleDB.c
                $(COMPILE.C) OracleDB.c
comm.o:         comm.h comm.c

-l与-L的不同:   -l连接的库文件是指定的,eg: -lsocket; 而-L连接的是目录下的所有库文件
------------------------------------------------------------------------------
 对进制转换的一些研究

short int *i = (short int *)"/01/03/02/03/0/0/0/0/0/0/0/0/0/0/0/016";
printf("%d/n", *i);
结果: 259
原因: short int是2个字节的, 所以i是/01/03代表的2个字节, 换成2进制是00000001 00000011
      转化成10进制就是259了. 同理printf("%d/n", *(i+1))的结果就是/02/03对应的515了
注意: 像上面那样赋值时是要有(short int *)显示类型转换的

short int *j = (short int *)"1234";
printf("%d/n", *i);
i是12代表的2个字节, '1'对应的ascii码值是49, 即2进制的110001, '2'对应50, 2进制是110010
所以结果是12594
------------------------------------------------------------------------------
2005-11-7 10:51
查看进程
cd /proc
cd 5833  /*进入5833进程*/

file 4  /*显示是一个socket*/
------------------------------------------------------------------------------

ipcs
ipcrm
释放共享内存和信号量
ipcrm -M 0x21fd -S 0x21fc
-----------------------------------------------------------------------------------
发现一个问题, 在solaris
用fopen(...,"a")创建一个文件时, 不用往该文件里写, 并且文件是普通文件
用open(..., O_APPEND|O_CREAT)创建一个文件时, 必须往该文件里写(即用write等写入)才能创建该文件,
并且文件是可执行文件, 文件名前面带*标识
-----------------------------------------------------------------------------------
当更改完用户目录下的.cshrc后, 要使之有效的2种方法:
1.重新登陆
2.source .cshrc

就ok了


看来相关的一些配置是在.cshrc这个隐藏文件里配置的

which会找环境变量中的path定义的路径下的

记住: -D是#define

gcc -Wall 是显示所有警告信息
gcc -g   是生成调试信息在编译后的文件中, 包括地址等,很大的, 用于gdb等工具的调试


发现: cd ssrcidl也会进到idl目录, 跟有几个/无关
-----------------------------------------------------------------------------------
关于makefile, 最后下面要留一空行, 否则有警告
 Warning: newline is not last character in file makefile


如果编译的是c文件, 那么就会包含一个预处理器名字__STDC__, 而c++是__cplusplus
注意这2个名字不会同时定义

c库头文件的c++名字总是前面有个c, 例如c中#include <stdio.h>. c++可以是#include <stdio.h>
或者#include <cstdio>, 但不能是#include <cstdio.h>, 会报找不到

动态分配的空间的对象是没有名字的, 唯一的访问方式是通过指针间接的访问

array._size和array.size()得到数组的维数, 但是array._size直接访问内存比array.size()调用函数快得多,
是否为了信息的隐藏而牺牲了效率呢? 一般是不, 因为有内联函数机制的

 

 

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值