linux 系统调用分析 使用strace工具
来源:互联网 发布:网络硬盘录像机多少钱 编辑:程序博客网 时间:2024/05/29 18:10
test.c
#include <stdio.h>#include <string.h>#include <unistd.h>#include <stdlib.h>//using namespace std;#define MAX_PARA_NUMS 10#define MAX_CHAR_EACH_PARA 256/**把带空格的input字符串 分割成几个不带空格的字符串例如:input = "ls /homg/ding"那么output[0] = "ls" output[1] = "/home/ding"函数返回output的数量*/int split(char* input, char output[MAX_PARA_NUMS][MAX_CHAR_EACH_PARA]){ int counter = 0; int len = strlen(input); int flag = 0 ; int i, j = 0 ; for(i = 0; i < len; i++) { if(input[i] == ' ') //当前字符是空格时,flag设为0 保存当前的字符串 { if(j != 0 && counter > 0) { output[counter - 1][j] = '\0'; } flag = 0; } else { if(flag == 0) // 新的字符串开始 bTemp设为 1 { j = 0; counter++; flag = 1; } output[counter - 1][j] = input[i]; // 仍然是上一个str j++; } } return counter; }char cmd[MAX_CHAR_EACH_PARA] ; //输入的命令int counter = 0; // 参数个数 最大设为了10char params[MAX_PARA_NUMS][MAX_CHAR_EACH_PARA]; // 接收一个一个的参数int main(){ int ret = 0 ;printf("Hello world, this is Linux!") ;while(1){printf(">");fgets(cmd,256,stdin) ;if (cmd[strlen(cmd) - 1] == '\n') { cmd[strlen(cmd) - 1] = '\0'; }if(fork() == 0){//execlp(cmd,NULL); counter = split(cmd, params); if(counter != 0) { //printf("counter = %d\n" , counter);switch(counter){case 0: break;case 1: {execlp(params[0], params[0], NULL);} break;case 2:{//printf("%s %s\n" ,params[0] ,params[1] );execlp(params[0], params[0] , params[1], NULL);}break;case 3:{execlp(params[0], params[0], params[1], params[2],(char*)0);}break;case 4:{execlp(params[0], params[0], params[1], params[2], params[3], (char*)0);}break;case 5:{execlp(params[0], params[0], params[1], params[2], params[3], params[4], (char*)0);}break;case 6:{execlp(params[0], params[0], params[1], params[2], params[3], params[4], params[5], (char*)0);}break;case 7:{ execlp(params[0], params[0], params[1], params[2], params[3], params[4], params[5], params[6], (char*)0);}break;case 8:{ execlp(params[0], params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7], (char*)0);}break;case 9:{ execlp(params[0], params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7], params[8], (char*)0);}break;case 10:{ execlp(params[0], params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7], params[8], params[9], (char*)0);}break;default:{printf("Illegal Input!\n");}} // end switch}}else{wait(&ret);printf("child process return %d\n",ret);} } // end whilereturn 0;}编译运行:
直接使用strace 命令
程序运行后 会停在read处 等待输入
在输入 ls /home/ding 后执行相应的命令
使用strace -f ./test 可以跟踪由fork调用所产生的子进程
可以看到整个程序的运行过程 以及
open read access write等系统函数的调用
学习参考:
strace的使用 http://blog.csdn.net/qq_26437925/article/details/49532921
execlp实例讲解:http://bubuko.com/infodetail-376404.html
0 0
- linux 系统调用分析 使用strace工具
- linux-系统调用01-strace工具的使用
- 使用strace工具跟踪系统调用
- 监控系统调用工具strace
- 监控系统调用工具strace
- strace——linux下系统调用跟踪诊断工具
- 使用strace工具跟踪系统调用和信号
- linux 系统调用跟踪---strace
- Linux strace 系统调用跟踪
- 使用strace监视系统调用
- 使用strace跟踪系统调用
- linux应用调试之使用strace命令跟踪系统调用
- 使用linux的strace来调试程序系统调用
- linux strace 工具的使用
- linux strace 工具的使用
- strace工具跟踪系统调用和信号
- 用strace工具跟踪系统调用
- strace linux 下程序的系统调用和信号调用跟踪工具
- Ant创建JAR可执行jar文件
- 如何用Maven创建web项目(具体步骤)
- debian安装sublime text 3
- Linux 下三种方式设置环境变量
- intelliJ IEDA + opencv 开发上手
- linux 系统调用分析 使用strace工具
- 商业模式(三):P2P网贷平台,毛利润测算
- 数据结构例程——最小生成树的普里姆算法
- 继电保护与自动装置例题6.10-20151101
- 工具条按钮间距的调整
- 4.Arduino IDE代码如下
- iOS: ARC和非ARC下使用Block属性的问题
- 第一篇博客
- java+opencv写homography to find a known object