sizeof

LocalSocket communication with Unix Domain in Android NDK

匿名 (未验证) 提交于 2019-12-03 00:46:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I have Android application, which needs to establish unix domain socket connection with our C++ library (using Android NDK) public static String SOCKET_ADDRESS = "your.local.socket.address"; // STRING There is LocalSocket in java which accepts "string" (your.local.socket.address) #define ADDRESS "/tmp/unix.str" /* ABSOLUTE PATH */ struct sockaddr_un saun, fsaun; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { perror("server: socket"); exit(1); } saun.sun_family = AF_UNIX; strcpy(saun.sun_path, ADDRESS); But the unix domain socket which is

Needless pointer-casts in C

匿名 (未验证) 提交于 2019-12-03 00:46:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I got a comment to my answer on this thread: Malloc inside a function call appears to be getting freed on return? In short I had code like this: int * somefunc (void) { int * temp = (int*) malloc (sizeof (int)); temp[0] = 0; return temp; } I got this comment: Can I just say, please don't cast the return value of malloc? It is not required and can hide errors. I agree that the cast is not required in C. It is mandatory in C++, so I usually add them just in case I have to port the code in C++ one day. However, I wonder how casts like this can

numa, mbind, segfault

匿名 (未验证) 提交于 2019-12-03 00:45:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I have allocated memory using valloc, let's say array A of [15*sizeof(double)]. Now I divided it into three pieces and I want to bind each piece (of length 5) into three NUMA nodes (let's say 0,1, and 2). Currently, I am doing the following: double* A=(double*)valloc(15*sizeof(double)); piece=5; nodemask=1; mbind(&A[0],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE); nodemask=2; mbind(&A[5],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE); nodemask=4; mbind(&A[10],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE);

Android NDK socket connect() returning 0 when it should fail whilst on 3g

匿名 (未验证) 提交于 2019-12-03 00:44:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I have written a socket in the android NDK and a server in c. It is able to connect to the server fine. However if the server is down or I try to get it to connect to a different random IP the call to connect still returns 0 when it should return -1. Here is the code for the client: #include <stdio.h> #include <jni.h> #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <android/log.h> #include <unistd.h> #define APPNAME "MyApp" #define logcat(...) __android_log_print(ANDROID_LOG_VERBOSE, APPNAME

C语言动态数组空间分配问题

匿名 (未验证) 提交于 2019-12-03 00:43:02
**动态数组起源:** 在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用静态数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数结合指针可以按需要动态地分配内存空间,来构建动态数组,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。动态数组的内存空间是从堆(heap)上分配(即动态分配)的。是通过执行代码而为其分配存储空间。当程序执行到这些语句时,才为其分配。程序员自己负责释放内存。对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc,calloc,free,realloc这四个函数。对于用malloc分配的内存区间,如果原来没有被使用过,则其中的每一位可能都是0;反之, 如果这部分内存空间曾经被分配、释放和重新分配,则其中可能遗留各种各样的数据。但调用calloc()函数分配到的空间在分配时就已经被初始化为0了。 **申请原则:** 申请的时候从外层往里层,逐层申请;释放的时候从里层往外层,逐层释放。 1. 一维数组分配与释放: * 分配: 函数原型:char *p = (char *)malloc(m*sizeof(char)); //申请m个int大小空间的p数组 //一维数组组名可以看成数组起始元素的首地址,p表示申请数组的首地址,表示申请char类型

类型 变量 进制

匿名 (未验证) 提交于 2019-12-03 00:39:02
一、类型 数据类型是程序的基础,决定了数据的意义,也决定了我们能在数据上所执行的操作。 从 http://www.cnblogs.com/Shuqing-cxw/p/9189411.html 2文件的本质可以知道,数据类型可以理解为固定大小内存的别名; 不同的数据类型,用于应对各种不同的需要;最简单的例如加减法使用整数型,而除法可能需要浮点类型更符合实际; 在存储空间中,使用数据类型来向整个存储空间申请一个相应大小的内存块以供使用; 1.1 基本类型 内置类型包括了算术类型和空类型; 算术类型分为两类:整型和浮点型; 整型包括字符类型和布尔类型(C++); 1.2 自定义类型 C语言中的结构体类型; C++语言中的类类型; C/C++的typedef关键字所定义的类型、枚举类型、联合/共用类型; 二、变量 通过使用数据类型来创建一些变量来形象具体的描述并操作这些固定大小的内存; 故可以看出,变量的本质就是一段实际连续存储空间的别名; 即,所占用的内存大小同数据类型所占的空间大小,且变量需要依赖归属某个数据类型; 程序中通过变量来申请并命名某一存储空间; 即术语中的声明 通过操作变量达到使用该存储空间的目的; 2.1 变量的定义 类型说明符 随后紧跟着由一个或多个变量名组成的列表,其中变量名以逗号分隔最后以分号结束;定义时可以为一个或多个变量赋初始值; int sum, value;

C位域知识小结

匿名 (未验证) 提交于 2019-12-03 00:36:02
位域的用途: 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几 个不同的对象用一个字节的二进制位域来表示。 1. 一个位域必须存储在同一个字节中,不能跨两个字节,故位域的长度不能大于一个字节的长度。 如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如: #include <iostream> using namespace std ; struct BitField1 { unsigned int a : 4 ; //占用4个二进制位; unsigned int : 0 ; //空位域,自动置0; unsigned int b : 4 ; //占用4个二进制位,从下一个存储单元开始存放; unsigned int c : 4 ; //占用4个二进制位; unsigned int d : 5 ; //占用5个二进制位,剩余的3个bit不够存储4个bit的数据,从下一个存储单元开始存放; unsigned int : 0

进制与类型

匿名 (未验证) 提交于 2019-12-03 00:34:01
一、进制 计算机通过关闭和打开状态组合来表示信息,用二进制非常方便,即用0和1表示,即比特序列,现代计算机普遍1byte使用8bit表示。 1.1 计算机中的八进制转二进制 8=2^3,即每个八进制位对应3个二进制位,按位拼接; 一个3位的八进制数可能要用9位二进制数来表示; 在C/C++中表示八进制数在其前面添加0标识 1 Example: 0377 → 377 ( 8 ) 2 7 = 111 3 3 = 011 4 故0377 = 1111 1111 5 说明八进制若标识比377还大的数需要2字节来表示; 1.2 计算机中的十六进制转二进制 16=2^4,即每个十六进制位对应4个二进制位,按位拼接; A=10,B=11,C=12,D=13,E=14,F=15 在C/C++中表示十六进制数在其前面添加0x或0X标识 1 Example: 0xA3F →A3F( 16 ) 2 A= 1010 3 3 = 0011 4 F= 1111 5 故0xA3F = 0000 1010 0011 1111 6 2个十六进制位符号表示一个8位比特序列,故以十六进制很方便表示字节值 二、类型 数据类型是程序的基础,决定了数据的意义,也决定了我们能在数据上所执行的操作。 从 http://www.cnblogs.com/Shuqing-cxw/p/9189411.html 不同的数据类型

18匿名管道

匿名 (未验证) 提交于 2019-12-03 00:32:02
管道概念 进程间通信工具, 把数据从一端输出到另一端 半双工通信 无名管道(直接称之为管道), 只能用于父子进程或者兄弟进程间通信。 命名管道 , 可以用于所有进程间通信 管道创建 <unistd.h> int pipe( int fds[2] ) 成功返回 0 , 失败返回 -1 fds[0] 用于读取, fds[1] 用于写入 思路: 管道(单向)创建流程 (父进程发送信息到子进程) 1: 创建管道 pipe() 获取管道 fds[0] (读取), fds[1] (写入) 2: 创建子进程 fork() 子进程继承 fds[0], fds[1] 3: 父进程关闭读取功能 close(fds[0]) 4: 子进程关闭写入功能 close(fds[1]) 5:父进程写信息到 fds[1] 6:子进程读信息从 fds[0] 单向管道 例子: 父进程发送消息到子进程 #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <ctype.h> void testSinglePipe() { int fds[2]; pid_t pid; char buf[128]={0}; //-1 crete pipe fail if(pipe(fds)) { perror("fail