




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 系统调用,授课教师:付勇智 西南林学院 基础部数理教研室,在C语言程序中,如何,运行另外一个程序? 中止其他程序运行? 创建/删除文件? 读写文件内容? 读写一个目录? 与另外一个运行的程序通信? 得到系统时间?,系统调用接口位置,用户程序,编程工具,二进制指令系统,硬件,系统调用接口,编程工具包,操作系统,硬件,硬件控制程序,文件子系统,I/O,设备,字符 块设备,设备驱动程序,进程控制,进程间通信,进程调度,内存管理,Minix系统调用 (1),进程管理,Minix系统调用(2),信号传递,Minix系统调用(3),文件读写操作,Minix系统调用(4),目录与文件系统管理,Min
2、ix系统调用(5),安全保护,Minix系统调用(6),时间管理,Shell程序中fork调用创建进程,示例. 两进程分别输出A,B,#include #include main() int i; pid_t pid; if (pid=fork()0)return -1; elseif (pid=0) for (i=1; i11; i+) printf(Child Process B, PID:%dn, getpid();sleep(i); else for(i=1; i11; i+)printf(Parent Process A, PID:%dn, getpid();sleep(2*i);
3、,Windows中进程创建,int system( const char *command ) 运行命令行命令(程序)command int _spawnl( int mode, const char *cmdname, const char *arg0, const char *arg1, . const char *argn, NULL ) 以模式mode,创建进程并以新进程执行程序cmdname,传入参数arg0-argn,_spawn调用的模式,_P_OVERLAY 子进程执行后,父进程中止 _P_WAIT 父进程暂停,等待子进程运行完成后继续 _P_NOWAIT 父进程、子进程并行运
4、行 _P_DETACH 父子进程并行运行,但子进程不能使用脱离对控制台键盘和显示输出的控制,子进程childp.exe,#include #include #include void main() while (1) printf(This is from CHILD process!n); Sleep(1000); ,父进程pProcess.exe,#include #include #include int main(int argc, char *argv) if (argc!=2) printf(RUNNING FORMAT: pProcess childprocessn); exit
5、(-1); _spawnl(_P_NOWAIT, argv1, argv1, NULL); while (1) printf(This is from PARENT process!n); Sleep(250); return 0; ,Autorun.exe实现,#include #include int main(int argc, char argv) system(explorer .); /printf(virus code may run here!n); /system(pause); return 0; ,Autorun2.exe的实现,#include stdafx.h int
6、 APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) _spawnl(_P_NOWAIT, C:windowsexplorer.exe, C:windowsexplorer.exe, ., NULL); MessageBox(0, Virus Code May Execute here, Virus, MB_ICONWARNING); return 0; ,CreateProcess系统调用,BOOL CreateProcess( LPCTSTR lpAppl
7、icationName, / name of executable module LPTSTR lpCommandLine, / command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, / SD LPSECURITY_ATTRIBUTES lpThreadAttributes, / SD BOOL bInheritHandles, / handle inheritance option DWORD dwCreationFlags, / creation flags LPVOID lpEnvironment, / new en
8、vironment block LPCTSTR lpCurrentDirectory, / current directory name LPSTARTUPINFO lpStartupInfo, / startup information LPPROCESS_INFORMATION lpProcessInformation / process information );,进程的内存通常有三部分组成,正文段:存储程序代码,长度固定不便 栈段:从最高端向下增长,主要存储各个函数过程调用中的局部变量(C语言中auto型局部变量)长度随程序运行动态变化,由CPU的栈寄存器ESP指向。 数据段:从低端
9、向上增长,存储程序的全局变量,静态变量和动态内存分配的内容,由操作系统管理。,进程内存映像,思考.,在C语言中,函数调用的时候到底发生了什么?形参和实参的值传递如何进行? 为什么递规函数在不同的递规调用层次同一个变量名却对应着不同的变量(值)? 为什么局部变量的作用范围仅局限于函数内部?而静态变量却可以跨越函数生存期? 动态内存分配函数malloc最终是如何实现的?它从哪里分配内存?,示例程序,#include int a=0; char b; int proc1(int x) int c=0; static int d=0; c+=x; d+=x; printf(c=%d, d=%dn, c
10、, d); return 0; ,int proc2(int y) a+=y; b-=y; return 1; int main(int argc, char *argv) int e; e=argc; b=1; e=proc1(proc2(e); e=proc1(a); return 5; ,malloc的实现,brk系统调用扩展进程的数据段 malloc通过brk系统调用扩展可用内存 新动态分配的内存在数据段向高端增长的部分,文件读写,ANSI C I/O文件操作函数及相关数据结构中定义 FILE 结构存储文件对象的数据结构 FILE *inp,*oup; C语言程序中对文件的读写都是通过
11、文件指针完成的。 实际上,scanf和printf函数从键盘输入和向显示器的输出也是文件的读写过程,分别是对标准输入文件指针(STDIN)和标准输出文件指针(STDOUT)的读写。,fopen函数打开文件,功能:将字符串表示的文件名及存放路径信息转换为程序读写文件时所用的FILE *型指针 char input=“C:dirdatain.txt”; if (inp=fopen (input,r)=NULL) printf (cannot open file to input information, please check it!n); exit(0); ,fopen调用格式,FILE fo
12、pen(char *filename, char *mode) 文件打开模式 “r”打开已有文件读取信息 “w”创建文件写信息,如果有同名覆盖原有文件 “a”打开已有文件,将信息添加到文件尾 “r+”打开已有文件读写 “w+”创建文件读写信息,如果有同名覆盖原有文件 “a+”打开已有文件,读信息并添加信息到文件尾,文件操作函数,int fprintf(FILE *fp, char *format, .) printf=fprintf(STDOUT, .) int fscanf(FILE *fp, char *format, .) scanf=fscanf(STDIN, .) int fgetc
13、(FILE *fp) 从文件中读一个字符 int fputc(int c, FILE *fp) 向文件输出一个字符,文件操作函数,int fputs(char *s, FILE *fp)向文件输出字符串 char* fgets(char *s, int n, FILE *fp)从文件中读入n个字符到字符数组s int ungetc(int c, FILE *fp)将读出的字符c退回文件 getchar=fgetc(STDIN) putchar(c)=fputc(c,STDOUT) gets(s)=fgets(s,STDIN)? puts(s)=fputs(s,STDOUT),管道操作,管道操作
14、,Windows注册表操作,#include stdafx.h #define LEN 256 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) HKEY hKey; HKEY newKey; int i; unsigned char keybuffLEN; char outinfoLEN; unsigned char *keyval; DWORD bufflen=LEN; DWORD querytype=REG_SZ; DWORD createst
15、atus;,keyval=new unsigned charLEN; strcpy(char*)keyval, JCB); for(i=0; i30; i+) RegOpenKeyEx(HKEY_LOCAL_MACHINE, SOFTWARE, 0, KEY_ALL_ACCESS, ,文件系统link调用,Figure (a) Two directories before linking /usr/jim/memo to asts directory. (b) The same directories after linking.,link(“/usr/jim/memo”,”/usr/ast/note”);,文件系统mount调用,Figure (a) File system before the mount. (b) File system after the mount.,mount(“/dev/cdrom0”,”/mnt”,0);,UNIX目录的读写,#include #include int main(int argc, char* argv) DIR *dp;struct dirent *dirp; if (argc!=2)exit(-1) if (dp=opendir(argv1)=NULL)exit(-2); while (dirp=readdir(dp)!
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年行政管理自考信息管理试题及答案
- 运动与糖分摄入关系考核试卷
- 印刷品与城市文化的关联考核试卷
- 印刷油墨耐化学品降解性研究考核试卷
- 2025年《3-6岁儿童学习与发展指南》健康领域试题及答案
- 燃烧效率评估考核试卷
- 用户增长预算分配策略考核试卷
- 2024年新疆新和县普通外科学(副高)考试题含答案
- 收购大豆管理办法
- 扭亏增盈管理办法
- 挤压车间生产工艺流程
- 港航疏浚事业部直属项目工程分包管理办法
- 路灯维修工考试题库单选题100道及答案
- 开题报告-中国特色社会主义教育学话语体系研究
- 成都市公安局锦江区分局招聘警务辅助人员真题
- 雨季施工安全注意事项
- 企业搬迁重置规划范文
- DB32-T 4165-2021 多联式空调(热泵)系统工程技术规程
- 数据中心运维服务投标方案
- 疗愈人心的创业:90后打造“青年养老院”
- 风电场道路维护与管理方案
评论
0/150
提交评论