第7章 Linux环境编程.

Slides:



Advertisements
Similar presentations
Linux 环境及 Shell 程序 操作系统实验 1. 二、 Shell 编程与进程通信 常用 shell 命令 文件及文件属性操作 ls 、 cp 、 mv 、 rm ln 、 ln –s 、 chmod 、 groupadd 、 useradd 输入输出操作 echo 、 cat >> 、
Advertisements

第1单元 操作系统概论 第一节 绪论 操作系统定义.
“八皇后”问题 崔萌萌 吕金华.
行程(process).
四資二甲 第三週作業 物件導向程式設計.
马志强 软件学院501室 网络应用开发 马志强 软件学院501室
操作系统原理 Principles of Operating System
基于操作系统的编程复习 张玉宏
檔案及目錄.
第 5 章 文件I/O操作.
1.1信号与系统.
© 2000 Wind River Systems, Inc.
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串
南京天石软件技术有限公司 陈锺 (QQ: Solaris 10 C编程 南京天石软件技术有限公司 陈锺 (QQ:
複習 struct score_Type{ int chinese,english; }; struct my_Type{
C File System.
選擇排序法 通訊一甲 B 楊穎穆.
C的發展史 C程式初體驗 C程式設計基本注意事項 上機實習課程
chapter 1-Introduction
计算概论 第二十一讲 文件操作 北京大学信息学院.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
C 程式設計— 指標.
第七章. 文件系统 (lab5).
C 程式設計— 指標 台大資訊工程學系 資訊系統訓練班.
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
程序讲解 第一题: 将指定文件的m行到n行字符写到显示屏上,m和n值从键盘输入。 运行时输入及结果: please enter m,n:
多进程编程.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
Function.
程序设计期末复习 黎金宁
程式撰寫流程.
C语言程序设计 李祥.
进程及进程管理 第4章 进程及进程管理.
Chapter 7 指標.
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2010
进程操作.
6 使用者函數 6.1 函數定義 宣告函數 呼叫函數 呼叫多個函數 6-6
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中.
第2章 套接字网络编程基础 2.1 UNIX套接字网络编程接口的 产生与发展 2.2 套接字编程的基本概念 2.3 面向连接的套接字编程
THE C PROGRAMMING LANGUAGE
字符串和字符数组 字符串的输入和输出 字符串的基本操作
Linux 文件操作——系统调用和标准 IO 库
实验一、进程控制 一、实验目的 1、加深对进程的理解,进一步认识并发执行的实质; 2、分析进程争用资源现象,学习解决进程互斥的方法;
第2章 进程和线程 内容提要: 2.1 进 程 概 念 2.2 进程的状态和组成 2.3 进 程 管 理 2.4 线 程.
第十三讲 文件流与 输出输入重载.
Oop8 function函式.
面向非连接的 SOCKET编程 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
C標準輸出入函數庫 與 作業系統.
<编程达人入门课程> 本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第7章 程序的结构 四、生存期与存储属性 五、extern关键字与外部连接属性 六、static关键字与内部连接属性.
第二章 类型、对象、运算符和表达式.
本节内容 函数嵌套调用的内存布局 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
挑戰C++程式語言 ──第9章 函數.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
实验二:添加Linux系统调用及熟悉常见系统调用
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab4.
作業一: 安裝Linux於btrfs上 中正大學 作業系統實驗室 指導教授:羅習五
第6章 嵌入式软件开发基础.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab2.
資料!你家住哪裏? --談指標 綠園.
实验三 Linux文件目录操作 一、目的 二、要求 了解并掌握Linux文件目录结构。 了解Linux文件系统与目录操作:
Introduction to the C Programming Language
《操作系统设计与实现》 第5章 文件系统.
《操作系统设计与实现》 Linux系统编程.
隨機函數.
Presentation transcript:

第7章 Linux环境编程

主要内容 系统调用和库函数简介 文件操作 进程管理和同步 进程通信 内存管理

7.1 系统调用和库函数 7.1.1 系统调用 系统调用是操作系统提供的、与用户程序之间的接口,也就是操作系统提供给程序员的接口 7.1 系统调用和库函数 7.1.1 系统调用 系统调用是操作系统提供的、与用户程序之间的接口,也就是操作系统提供给程序员的接口 从感觉上系统调用类似于过程调用,都由程序代码构成,使用方式相同 两者有实质差别:过程调用只能在用户态下运行,不能进入核心态;而系统调用可以实现从用户态到核心态的转变。 系统调用可大致分为五个类别:进程控制、文件管理、设备管理、信息维护和通信

7.1.2 库函数 7.1.2 库函数 它们本身并不属于操作系统的内核部分 库函数可以分为下面六大类: 7.1.2 库函数 它们本身并不属于操作系统的内核部分 库函数可以分为下面六大类: ① 文件管理 ② 状态信息 ③ 文件修改 ④ 程序设计语言的支持 ⑤ 程序装入和执行 ⑥ 通信 7.1.2 库函数

7.1.3 调用方式 例如,open系统调用可以打开一个指定文件,其函数原型说明如下: 7.1.3 调用方式 例如,open系统调用可以打开一个指定文件,其函数原型说明如下: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *path, int oflags); 不同的系统调用所需要的头文件(又称前导文件)是不同的。

7.2 文 件 操 作 7.2.1 有关文件操作的系统调用 常用的有关文件操作的系统调用有:creat,open,close,read,write,lseek,link,unlink,mkdir,rmdir,chdir,chmod等 例如: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int creat(const char *pathname, mode_t mode); int open(const char *path, int oflags); int open(const char *path, int oflags, mode_t mode);

7.2.2 应用示例 /* rdwr.c-The read and write system calls */ 7.2.2 应用示例 /* rdwr.c-The read and write system calls */ #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> int main(void) { int fd1,fd2,fd3,nbytes; int flags=O_CREAT|O_TRUNC|O_WRONLY; char buf[10]; if((fd1=open("rdwr.c",O_RDONLY,0644))<0){ perror("open rdwr.c"); exit(EXIT_FAILURE); } if((fd2=open("/dev/null",O_WRONLY))<0){ perror("open /dev/null"); if((fd3=open("/tmp/foo.bar",flags,0644))<0){ perror("open /tmp/foo.bar"); close(fd1); close(fd2); exit(EXIT_FAILURE); } while((nbytes=read(fd1,buf,10))>0){ if(write(fd2,buf,10)<0) perror("write /dev/null"); if(write(fd3,buf,nbytes)<0) perror("write /tmp/foo.bar"); write(STDOUT_FILENO,buf,10); close(fd3); exit(EXIT_SUCCESS);

7.3 进 程 控 制 7.3.1 有关进程控制的系统调用 常用的有关进程控制的系统调用有:fork,exec,wait,exit,getpid,sleep,nice等 例如: #include <unistd.h> #include <sys/types.h> pid_t fork(void); pid_t getpid(void); pid_t getppid(void);

7.3.2 应用示例 else if(child==0){ /*此时是子进程被调度运行*/ /*proc1.c演示有关进程操作*/ 7.3.2 应用示例 else if(child==0){ /*此时是子进程被调度运行*/ old_ppid=getppid(); sleep(2); new_ppid=getppid(); } else { sleep(1); exit(0); /*父进程退出*/ /*下面仅子进程运行*/ printf("Original parent:%d\n",parent); printf("Child:%d\n",getpid()); printf("Child's old ppid:%d\n",old_ppid); printf("Child's new ppid:%d\n",new_ppid); exit(0); /*proc1.c演示有关进程操作*/ #include <unistd.h> #include <sys/types.h> #include <stdio.h> #include <errno.h> int main(int argc,char **argv) { pid_t pid,old_ppid,new_ppid; pid_t child,parent; parent=getpid(); /*获得本进程的PID*/ if((child=fork())<0){ fprintf(stderr,"%s:fork of child failed:%s\n",argv[0],strerror(errno)); exit(1); }

7.4 进 程 通 信 Linux下进程间通信的几种主要手段是:管道(pipe)及有名管道(named pipe)、信号(signal)、消息(message)、共享内存(shared memory)、信号量(semaphore)和套接口(socket)。 7.4.1 有关进程通信的函数 例如: #include <unistd.h> int pipe(int filedes[2]); #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode);

7.4.2 应用示例 /*pipedemo.c演示使用管道机制进行I/O控制*/ #include <unistd.h> 7.4.2 应用示例 /*pipedemo.c演示使用管道机制进行I/O控制*/ #include <unistd.h> #include <stdio.h> #include <errno.h> int main(int argc,char **argv) { static const char mesg[]="Happy New Years to you!"; char buf[BUFSIZ]; size_t rcount,wcount; int p_fd[2]; size_t n; if(pipe(p_fd)<0){ /*创建管道*/ fprintf(stderr,"%s:pipe failed:%s\n",argv[0],strerror(errno)); exit(1); } printf("Read end=fd %d,write end=fd %d\n",p_fd[0],p_fd[1]); n=strlen(mesg); if((wcount=write(p_fd[1],mesg,n))!=n){ /*写入数据*/ fprintf(stderr,"%s:write failed:%s\n",argv[0],strerror(errno)); exit(1); } if((rcount=read(p_fd[0],buf,BUFSIZ))!=wcount){ /*读出数据*/ fprintf(stderr,"%s:read failed:%s\n",argv[0],strerror(errno)); buf[rcount]='\0'; printf("Read <%s> from pipe\n",buf); close(p_fd[0]); close(p_fd[1]); return 0;

7.5 内 存 管 理 #include <stdlib.h> void *malloc(size_t size); 7.5 内 存 管 理 #include <stdlib.h> void *malloc(size_t size); void *calloc(size_t nmemb, size_t size); void *realloc(void *ptr, size_t size); void free(void *ptr);

7.6 综合编程示例 Shell命令 可执行的C程序 系统调用 system函数