文章分类 - C
摘要:内存屏障是指“由于编译器的优化和缓存的使用,导致对内存的写入操作不能及时的反应出来,也就是说当完成对内存的写入操作之后,读取出来的可能是旧的内容”。(这里概念貌似不是很准确,正确的定义:为了防止编译器和硬件的不正确优化,使得对存储器的访问顺序(其实就是变量)和书写程序时的访问顺序不一致而提出的一种解
阅读全文
摘要:unlink 函数功能:删除一个文件的目录项并减少它的链接数,若成功则返回0,否则返回-1,错误原因存于errno。如果想通过调用这个函数来成功删除文件,你就必须拥有这个文件的所属目录的写和执行权限。 #include<unistd.h> #include<stdio.h> int main(voi
阅读全文
摘要:很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为”计算机
阅读全文
摘要:首先你必须知道pthread_cleanup_push与pthread_cleanup_pop的目的(作用)是什么。比如thread1:执行pthread_mutex_lock(&mutex);//一些会阻塞程序运行的调用,比如套接字的accept,等待客户连接sock = accept(........
阅读全文
摘要:计算机中数据都是以补码形式存在 正数 原码 反码 补码相同 负数 反码:原码的符号位不变,其它位取反。 补码:反码+1 以一字节为例:如3的原码反码补码都是00000011 如-3的原码:10000011,反码:11111100 补码:11111101 -----------------------
阅读全文
摘要:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存
阅读全文
摘要:#include <dirent.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { DIR *dp; struct dirent *dirp; if (argc != 2) { printf("u
阅读全文
摘要:对齐的概念: 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是 在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。对齐的作用以及原因: 各个硬件
阅读全文
摘要:三个宏的使用va_arg()、va_start()和va_end() 上述的宏原型如下所示: type va_arg(va_list argptr, type); void va_end(va_list argptr); void va_start(va_list argptr, last_parm
阅读全文
摘要:#define ANDROID_SOCKET_DIR "/dev/socket"#define PROP_SERVICE_NAME "property_service"#define PROP_FILENAME "/dev/__properties__"static char property_fi
阅读全文
摘要:本文主要讲述如何在进程中运行新代码,以及exec系列函数的基本使用方法. 在进程中运行新代码 用函数fork创建子进程后,如果希望在当前子进程中运行新的程序,可以调用exec函数执行另一个程序.当进程调用exec函数时,该进程用户空间资源 (正文、数据、堆和栈)完全由新程序替代,新程序则从main函
阅读全文
摘要:GNU make 的工作方式 Gcc总体选项列表 后 缀 名 所对应的语言 -S 只是编译不汇编,生成汇编代码 -E 只进行预编译,不做其他处理 -g 在可执行程序中包含标准调试信息 -o file 把输出文件输出到file里 -v 打印出编译器内部编译各过程的命令行信息和编译器的版本 -I dir
阅读全文
摘要:epoll的相关系统调用 epoll只有epoll_create,epoll_ctl,epoll_wait 3个系统调用。 1. int epoll_create(int size); #include <sys/epoll.h> int epoll_create(int size); int ep
阅读全文
摘要:#include <signal.h> #include <stdio.h> #include <stdlib.h> void sig_chld(int signo){ printf("get signal:%d\n", signo); } int main(void){ pid_t pid; st
阅读全文
摘要:1. strcpy是最不安全拷贝字符串函数,因为src串的长度有时会很长。随后strncpy函数为了解决这个问题出现了,但这个函数有些地方实现得也很诡异,它对于字符串末尾的’\0’处理不是很好。 例1: char str[11]; strncpy(str, "hello world", 11); 在
阅读全文
摘要://fcntl.c#include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <string.h> int set_fd(int); int main() { int fd,ret; c
阅读全文
摘要:typeof()用于返回表达式或参数的类型 typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛。1,表达式的的例子:typeof(x[0](1))这里假设x是一个函数指针数组,这样就可以得到这个函数返回值的类型了。如果将typeof用于表达式,则该表达式不会执行。只会得
阅读全文
摘要:下面说一下,pthread_cond_wait(&mycond,&mymutex)的东西1. 设计pthread_cond_wait 的初衷 线程如果需要等待某个条件发生,它该作何处理呢?它可以重复对互斥对象锁定和解锁,每次都会检查共享元素,以查找某个值。这样会比较浪费cpu的时钟周 期。而且效率比
阅读全文
摘要:1. 互斥锁创建 有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pt
阅读全文
摘要:什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。 下面是Linux系统下用C语言创建的一个线程池。线
阅读全文

浙公网安备 33010602011771号