网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > 嵌入式系统 > 文章  
ARM的嵌入式Linux移植体验之应用实例
文章来源: 天极开发 文章作者: 宋宝华 发布时间: 2006-08-15   字体: [ ]  
 

  wait

  wait系统调用包括:

pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);

  wait的作用为发出调用的进程只要有子进程,就睡眠到它们中的一个终止为止; waitpid等待由参数pid指定的子进程退出。

  Linux的进程间通信(IPC,InterProcess Communication)通信方法有管道、消息队列、共享内存、信号量、套接口等。套接字通信并不为Linux所专有,在所有提供了TCP/IP协议栈的操作系统中几乎都提供了socket,而所有这样操作系统,对套接字的编程方法几乎是完全一样的。管道分为有名管道和无名管道,无名管道只能用于亲属进程之间的通信,而有名管道则可用于无亲属关系的进程之间;消息队列用于运行于同一台机器上的进程间通信,与管道相似;共享内存通常由一个进程创建,其余进程对这块内存区进行读写;信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。

  下面是一个使用信号量的例子,该程序创建一个特定的IPC结构的关键字和一个信号量,建立此信号量的索引,修改索引指向的信号量的值,最后清除信号量:

#include <stdio.h>
#include <sys/types.h>
#include <sys/sem.h>
#include <sys/ipc.h>
void main()
{
 key_t unique_key; /* 定义一个IPC关键字*/
 int id;
 struct sembuf lock_it;
 union semun options;
 int i;

 unique_key = ftok(".", 'a'); /* 生成关键字,字符'a'是一个随机种子*/
 /* 创建一个新的信号量集合*/
 id = semget(unique_key, 1, IPC_CREAT | IPC_EXCL | 0666);
 printf("semaphore id=%d\n", id);
 options.val = 1; /*设置变量值*/
 semctl(id, 0, SETVAL, options); /*设置索引0的信号量*/

 /*打印出信号量的值*/
 i = semctl(id, 0, GETVAL, 0);
 printf("value of semaphore at index 0 is %d\n", i);

 /*下面重新设置信号量*/
 lock_it.sem_num = 0; /*设置哪个信号量*/
 lock_it.sem_op = - 1; /*定义操作*/
 lock_it.sem_flg = IPC_NOWAIT; /*操作方式*/
 if (semop(id, &lock_it, 1) == - 1)
 {
  printf("can not lock semaphore.\n");
  exit(1);
 }

 i = semctl(id, 0, GETVAL, 0);
 printf("value of semaphore at index 0 is %d\n", i);

 /*清除信号量*/
 semctl(id, 0, IPC_RMID, 0);
}

  3. 线程控制/通信编程

  Linux本身只有进程的概念,而其所谓的"线程"本质上在内核里仍然是进程。大家知道,进程是资源分配的单位,同一进程中的多个线程共享该进程的资源(如作为共享内存的全局变量)。Linux中所谓的"线程"只是在被创建的时候"克隆"(clone)了父进程的资源,因此,clone出来的进程表现为"线程"。Linux中最流行的线程机制为LinuxThreads,它实现了一种Posix 1003.1c "pthread"标准接口。

  线程之间的通信涉及同步和互斥,互斥体的用法为:

pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL); //按缺省的属性初始化互斥体变量mutex
pthread_mutex_lock(&mutex); // 给互斥体变量加锁
… //临界资源
phtread_mutex_unlock(&mutex); // 给互斥体变量解锁

 
推荐文章
·嵌入式Linux平台的多协议路由器
·恰当选择嵌入式Linux环境下的GUI
·嵌入式Linux系统的MiniGUI研究和
·基于Linux的移动电话开发技术及
·嵌入式uClinux的内核结构和开发
·基于 GTK+ 和 X-window 的 GUI
·基于Qt/Embedded和Qtopia的GUI设
·恰当选择嵌入式Linux环境下的GUI
·ARM的嵌入式Linux移植体验之操作
·ARM的嵌入式Linux移植体验之基本
·ARM的嵌入式Linux移植体验之设备
·ARM的嵌入式Linux移植体验之Boot
·嵌入式Linux系统中的GUI系统的研
·QTE/Qtopia在Liod-270上的移植
 
 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·ARM的嵌入式Linux移植体
·U-Boot简介
·基于Qt/Embedded的GUI移
·基于Qt/Embedded和Qtopi
·U-BOOT的启动流程及移植
·ARM的嵌入式Linux移植体
·几种Linux嵌入式开发环
·ARM的嵌入式Linux移植体
相关文章
·ARM的嵌入式Linux移植体
·ARM的嵌入式Linux移植体
·ARM的嵌入式Linux移植体
·ARM的嵌入式Linux移植体
·Linux设备驱动编程之阻
·Linux桌面应用与Windows
·Linux设备驱动编程之中
·关于Linux系统安全管理
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统