
C语言
梦想不能在远方
邮箱:1113997619@qq.com
展开
-
C语言 字节对齐
结构体变量的首地址能够被其最宽基本类型成员的大小所整除;结构体每个成员相对结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。#include <stdio.h>// 按结构体最宽数据类型int对齐// char[*]多少都是按4字节对齐struct stChar{ char a[5]; int b; .原创 2022-03-29 17:08:14 · 1694 阅读 · 0 评论 -
C语言基础整理
很久之前写的C语言基础,发出来请大家指导,包含const、extern、static的使用方法,和使用场景。constconst 修饰变量 表示变量为常量,不可修改const int a =1; int const a =1; 相同含义,都表示n为常量不可修改。 a = 2 报错const char c[10] = “123”; 定义之后不能改变。c[0] =‘3’ 报错。const int *a; 常量指针 变量不可修改 const char *str;字符串不能修改 str[2]原创 2022-02-17 10:56:02 · 474 阅读 · 0 评论 -
makefile碰到问题总结
make报错警告:将一个整数转换为大小不同的指针/usr/bin/ld:找不到 -lxxxundefined reference to symbol *** DSO missing ***对***未定义的引用执行动态库函数报错警告:将一个整数转换为大小不同的指针[-Wint-to-pointer-cast]make报错解决方案:直接执行命令man PEM_read_RSA_PUBKEY查找所需头文件#include <openssl/pen.h>添加到调用本函数的.c文件中。原创 2022-01-19 11:09:06 · 2150 阅读 · 0 评论 -
linux c同一个动态库,放到多台机器,其中一台机器段错误core
现象:linux c编译的一个动态库,放到多台机器,其中一台机器产生core文件,其它机器正常运行。分析:由于编译成动态库,系统使用不生成core文件,无法跟踪问题。我单独编写dlsym程序进行测试。程序如下:#include <stdio.h>#include <stdlib.h>#include <dlfcn.h>#define FAIL -1int (*p_func)();void *p_handle;int main(){ in原创 2022-01-17 16:57:04 · 936 阅读 · 0 评论 -
多线程JNI使用TUXEDO客户端问题
测试的时候,报文正常通过,一段时间之后,出现报文全部卡死,之后所有报文都不能正常通讯。(顶不住压力,交易量大就死)1、重启平台之后,通讯暂时恢复,一段时间之后有卡死。2、最开始怀疑,内存未回收,jni的变量和tuxedo的变量未回收,检查是否都tpfree和release掉。3、跟踪jni的程序,发现进入jni函数之后,tpinit出现阻塞,导致之后所有交易都卡到,进jni的c程序之后。4、去掉tpinit之后,发现程序都阻塞到了,tpcall里面。不tpinit,tpcall自动tpinit。5原创 2021-07-21 11:01:05 · 443 阅读 · 0 评论 -
dlsym调用,报错undefinedsymbol:
C++程序test.cpp使用g++编译生成动态库//函数名int test(){//函数实现}g++ -shared -o libtest.so -fPIC test.c使用dlsym调用test时,报错undefinedsymbol:test使用nm查看动态库内函数,nm libtest.so发现存在_Z4testv。原函数test,生成动态库之后,原函数名变成_Z4testv。使用dlsym直接调用_Z4testvdlsym(p_handle,"_Z4tes原创 2021-06-30 08:56:08 · 3057 阅读 · 2 评论 -
ERROR: Unable to open TUXCONFIG file
tuxedo遇到报错及解决方案ULOG问题180831.DESKTOP-4034F0E!tmboot.13956.12592.-2: 05-22-2021: Tuxedo Version 12.1.3.0.0_VS2012, 64-bit180831.DESKTOP-4034F0E!tmboot.13956.12592.-2: LIBTUX_CAT:602: ERROR: TUXCONFIG environment variable not set180831.DESKTOP-4034F0E!tm原创 2021-05-28 20:26:17 · 750 阅读 · 0 评论 -
ERROR: Cannot create ipc data
tuxedo遇到报错及解决方案ULOG问题174329.DESKTOP-4034F0E!?proc.6096.1424.0: 05-20-2021: Tuxedo Version 12.1.3.0.0_VS2012, 64-bit174329.DESKTOP-4034F0E!?proc.6096.1424.0: TUXNT_CAT:16: ERROR: Cannot access Service Manager (�ܾ����ʡ�)174329.DESKTOP-4034F0E!?proc.6096原创 2021-05-28 20:23:20 · 346 阅读 · 0 评论 -
windows编译tuxedo的dll动态库遇到问题总结
ULOG180831.DESKTOP-4034F0E!tmboot.13956.12592.-2: 05-22-2021: Tuxedo Version 12.1.3.0.0_VS2012, 64-bit180831.DESKTOP-4034F0E!tmboot.13956.12592.-2: LIBTUX_CAT:602: ERROR: TUXCONFIG environment variable not set180831.DESKTOP-4034F0E!tmboot.13956.12592.-2原创 2021-05-28 18:18:49 · 383 阅读 · 0 评论 -
ERROR: Unable to establish WSL connection
190721.DESKTOP-4034F0E!?proc.14924.332.0: 05-22-2021: Tuxedo Version 12.1.3.0.0_VS2012, 64-bit190721.DESKTOP-4034F0E!?proc.14924.332.0: LIBWSC_CAT:1055: ERROR: Unable to establish WSL connection190721.DESKTOP-4034F0E!?proc.14924.332.0: LIBWSC_CAT:1027: E原创 2021-05-27 19:11:17 · 743 阅读 · 0 评论 -
java使用jni连接tuxedo(linux)
文章目录运行环境1、java程序2、生成C的头文件3、C程序4、执行程序测试运行环境本文章在C语言拼包。需要安装java环境,和tuxedo的客户端。1、java程序新建TuxedoJNI.java文件public class TuxedoJNI{ static{ System.load("/home/test/tuxedo/libtuxedo.so"); } public native static int tuxe原创 2021-04-27 15:57:15 · 442 阅读 · 0 评论 -
LINUX处理GBK编码(C语言)
文章目录基础知识ASCII 码汉字编码基础知识C语言使用char类型保存字符。一个char类型字符占用一个字节。字节是一个八位的存储单元,每一位是0或者1,所以一个包含8位的字节有2的8次幂共256种组合。每种不同组合就表示不同字符。00000000到11111111也就是从0到255,所以,一个char类型最多就能保存256个不同字符。ASCII 码标准ASCII 码,也叫基础ASCII码。ASCII码占用一个字节,使用7 位二进制数来表示所有的大写和小写字母, 数字0 到9、标点符号,以及原创 2021-04-20 16:11:34 · 1591 阅读 · 0 评论 -
linux c语言 字符串去特定字符 例如^M、回车
使用C语言,生成数据库导入文件时,由于有字段包含^M,导致导入数据库命令报错,数据无法入库。字符串使用vim查看的时候,显示包含^M字符。使用使用od -c 文件名,查看发现^M是\r\n字符串。int Replace_Buf(char *sBuf){ char *p = sBuf; p = sBuf; while(1) { if(p = strstr(p, "\r原创 2021-03-25 16:51:08 · 1812 阅读 · 0 评论 -
make执行报错(二)
make报错: /usr/bin/ld:找不到 -lxxx不是系统库,但是我已经在-L中指明静态库所在路径,之后我又把库的路径,加到LD_LIBRAR_PATH环境变量当中(这步不知道有没有用)。编译依然报错。考虑静态库顺序问题,gcc依赖顺序从后到前,把底层库顺序调到最后。make成功。...原创 2020-11-13 11:03:08 · 700 阅读 · 0 评论 -
linux程序执行报错undefinedsymbol:_ZTVN10_cxxabiv117_class_type_infoE
程序执行时报错undefinedsymbol:_ZTVN10_cxxabiv117_class_type_infoE遇到过多次类似问题解决方案:编译的时候,需要使用g++编译,不能使用gcc编译,编译通过,执行报错。原创 2020-10-24 17:02:38 · 1850 阅读 · 0 评论 -
make执行报错(一)
make报错,解决方案添加-l指定库文件。现象:make 报错undefined reference to symbol ‘***’/usr/bin/ld:/home/…/lib111.so:undefined reference to symbol ‘***’/home/…/lib222.so:error adding symbols:DSO missing from commadn linecollect2:错误:ld 返回1make报错解决方案:makefile中gcc添加lib22原创 2020-10-20 16:39:38 · 5663 阅读 · 0 评论 -
c语言访问postgresql有两种方式
c语言访问postgresql有两种方式通过libpq通过ESQL1、通过libpq2、通过ESQL通过libpq通过ESQL1、通过libpqibpq 是一套允许客户程序向PostgreSQL 服务器服务进程发送查询并且获得查询返回的库函数。libpq同时也是其他几个PostgreSQL 应用接口下面的引擎,包括 C++,Perl,Python,Tcl 和ECPG。c语言调用libpq库,同java使用jdbc原理效果一样。使用libpq的必须包括头文件 libpq-fe.h 并且编译的时候原创 2020-10-15 11:00:50 · 1899 阅读 · 0 评论 -
getenv 执行报段错误
getenv函数编译报错,返回值为intstrcpy时,实参的类型为‘ int’,编译告警编译警告,执行的时候,段错误。问题确认为getenv的头文件 #include <stdlib.h> 未添加。系统man getenv可以看到所需头文件,我的man不好使,大意了。...原创 2020-09-29 15:30:12 · 1160 阅读 · 0 评论 -
惠普小型机makefile转移到LINUX
整理一个C++程序的makefile,由惠普小型机,转到LINUX系统,并编译通过的过程。惠普小型机makefile linux的makefilePLATFORM = HPUX PLATFORM = LINUX 平台 调用其他组件使用COMPILER = aCC COMPILER = g++ ...原创 2020-09-18 11:26:23 · 318 阅读 · 0 评论 -
linux动态库so更新
linux更新so库:不能直接使用cp进行覆盖,源程序直接段错误。进入/lib文件夹,先删除原来库文件,再放进去新库文件。执行ldconfig命令,重新加载so库文件。否则不生效。动态库生成见之前博客https://blog.youkuaiyun.com/hutiewei2008/article/details/84650997...原创 2019-01-10 16:41:47 · 6092 阅读 · 0 评论 -
socket服务端,接受处理数据线程卡死,问题分析
C语言socket服务端,接收客户端报文,使用新线程处理客户端报文。处理数据线程,有如下代码。pthread_mutex_lock(&logfile_lock);if (NULL == g_logfile_fp || MAX_LOG_NUM < g_logfile_size_counter) ...g_timet0 = timet_...原创 2019-08-07 10:47:25 · 3659 阅读 · 0 评论