嵌入式
深度思索
走在路上思考着前进
展开
-
linuxC编程之文件操作与进程初步
一、文件操作 在头文件“fcntl.h"中1)int creat(char *filename,int MODE)2)int open(char *filename,int flags,mode_t mode) 或int open (char *filename ,int flags) 返回文件的标示符。3)int read(int fd,const void原创 2013-10-11 21:55:57 · 1156 阅读 · 0 评论 -
linux下的多线程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用原创 2014-05-12 22:20:34 · 900 阅读 · 0 评论 -
(void)(&x==&y)
#define max(x,y) ({ \typeof(x) _x = (x); \typeof(y) _y = (y); \(void) (&_x == &_y); \_x > _y ? _x : _y; })typeof(x)的意思是取x的类型,这不是标准C里的,gcc支持,vc不支持(void) (&_x == &_y);这句话本身从执行程序来讲原创 2014-05-19 21:25:33 · 2035 阅读 · 0 评论 -
__attribute__机制介绍
1. __attribute__ GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)__attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attrib原创 2013-11-02 23:52:30 · 1171 阅读 · 0 评论 -
linux网络编程
(一)Linux网络编程--网络知识介绍Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的转载 2013-10-15 21:17:06 · 909 阅读 · 0 评论 -
令人费解的bind函数
首先,服务器和客户端都可以bind,bind并不是服务器的专利。客户端进程bind端口: 由进程选择一个端口去连服务器,注意这里的端口是客户端的端口。如果不分配就表示交给内核去选择一个可用端口。客户端进程bindIP地址:相当于为发送出去的IP数据报分配了源IP地址,但交给进程分配IP地址的时候(就是这样写明了bindIP地址的时候)这个IP地址必须是主机的一个接口,不能分配一个不存在的I转载 2013-10-15 09:22:37 · 1212 阅读 · 0 评论 -
linuxC之多线程
线程有关的函数都在头文件#include中。一、创建线程 int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,void*(*start_rtn)(void),void *arg); 若成功则返回0,否则返回出错编号。返回成功时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于指原创 2013-10-14 20:10:33 · 801 阅读 · 0 评论 -
进程通信之共享内存
共享内存 首先应该清楚,共享内存是进程共享数据最快的一种方法,同样这也表明了它的不安全性因素。一、获得\创建共享内存 #include #include int shmget(key_t shmid,size_t size,int shmflg); key 0(IPC_PRIVATE):会建立新共享内存对象,大于0的32位整数:视参数shm原创 2013-10-12 23:03:19 · 1523 阅读 · 0 评论 -
进程通信之信号通信
信号机制是unix系统中最为古老的进程间通信。一、发送信号1》进程间1)kill函数 #include #include int kill(pid_t pid,int signal); kill函数可以在任意进程间发送信号。根据pid的不同,发送的对象也有改变,见图2)raise函数 int raise(int signo);原创 2013-10-12 20:26:51 · 1121 阅读 · 0 评论 -
进程通信之管道通信
1》无名管道 无名管道只能用于父进程与子进程间通信,由pipe函数建立管道。语法如下。 #include int pipe_f[2]; 储存文件描述符 int pipe(pipe_f); 创建管道 管道即类似临时文件,描述符存储在pipe_f二元数组内。其中pipe_f[0]为读管道,pipe_f原创 2013-10-12 18:14:24 · 1309 阅读 · 0 评论 -
linux线程私有数据
1.为什么需要线程私有数据:原因一:有时候需要维护基于每个线程的数据,用线程ID作为索引。因为线程ID不能保证是小而连续的整数,所以不能简单的分配一个线程数据数组,用线程ID作为数组的索引。即使线程ID确实是小而连续的整数,可能还希望有一些额外的保护,以防止某个线程的数据和其它线程的数据相混淆。原因二:可以让基于进程的接口适应多线程环境,比如errno,线程出现以前errno被定义成进程环转载 2014-10-21 22:07:57 · 820 阅读 · 0 评论