文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发其他语言ARM的嵌入式Linux移植体验之应用实例
精品推荐
特别推荐
·控制面板知多少
·给你十条学习Ruby语言的理由
·分页管理机制
·Perl 语言的重要价值体现
·经验技巧:分享两条Delphi开发经验
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
热点TOP10
·程序八卦:胡子决定编程语言运势
·EZ-USB 68013A开发指南
·AIX 5L 学习大纲/简易教程(3)(未经许可,请勿COPY)
·Static和Final修饰类属性变量及初始化
·Servlet和Filter的url匹配url-pattern
·Flex挑战Java和.NET Adobe能否再度崛起?
·Java编程思想:面向对象的逻辑思维方法
·How to cross-compile OpenSSL for ARM
·在Pocket PC上编写游戏之十
·设计Pocket PC短消息服务简介

ARM的嵌入式Linux移植体验之应用实例

日期:2008年5月12日 作者: 查看:[大字体 中字体 小字体]



  来看下面的例子:

int variable, fd;

int do_something() {
 variable = 42;
 close(fd);
 _exit(0);
}

int main(int argc, char *argv[]) {
 void **child_stack;
 char tempch;

 variable = 9;
 fd = open("test.file", O_RDONLY);
 child_stack = (void **) malloc(16384);
 printf("The variable was %d\n", variable);

 clone(do_something, child_stack, CLONE_VMCLONE_FILES, NULL);
 sleep(1); /* 延时以便子进程完成关闭文件操作、修改变量 */

 printf("The variable is now %d\n", variable);
 if (read(fd, &tempch, 1) < 1) {
  perror("File Read Error");
  exit(1);
 }
 printf("We could read from the file\n");
 return 0;
}
  运行输出:

The variable is now 42
File Read Error
  程序的输出结果告诉我们,子进程将文件关闭并将变量修改(调用clone时用到的CLONE_VM、CLONE_FILES标志将使得变量和文件描述符表被共享),父进程随即就感觉到了,这就是clone的特点。

  sleep

  函数调用sleep可以用来使进程挂起指定的秒数,该函数的原型为:  

unsigned int sleep(unsigned int seconds);
  该函数调用使得进程挂起一个指定的时间,如果指定挂起的时间到了,该调用返回0;如果该函数调用被信号所打断,则返回剩余挂起的时间数(指定的时间减去已经挂起的时间)。

  exit

  系统调用exit的功能是终止本进程,其函数原型为:

void _exit(int status);
  _exit会立即终止发出调用的进程,所有属于该进程的文件描述符都关闭。参数status作为退出的状态值返回父进程,在父进程中通过系统调用wait可获得此值。

  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; /*操作方式*/

上一页 [1] [2] [3] [4] [5] 下一页 




上一篇:ARM的嵌入式Linux移植体验之设备驱动

下一篇:Continuation 和高级流程控制

相关文章:
·Photoshop CS3合成实例:人间天堂
·从零开始 无线网络终极应用宝典
·注册表应用100例—注册表使用全攻略之十一
·DataList嵌套实例
·WindowsXP应用技巧的具体总结
·Photoshop实例:制作超酷影片画面场景
·综合实例:PS洗衣粉包装设计印刷全攻略
·每周电脑应用技巧荟萃
·Photoshop精细抠像实例
·几何图形英文字体创意设计及应用作品欣赏
相关软件:
·中文版Excel 2003实例与技巧
·CorelDraw12 入门与实例(图文教程 菜鸟先飞系列教材)
·AutoCAD2002入门与实例详解
·鸟哥的linux私房菜:基础学习篇
·注册表实例应用视频教程swf
·Flash MX 动画制作实例教程
·Excel应用宝典
·PhotoShop7 设计百例 + 经典实例教程 + 滤镜教学
·AUTOCAD 2002机械设计应用与实例
·Flash MX 教程与实例精选

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot