cs241 utilities unleashed notepad1

Linux System Programming

pid_t fork();

​ // fork是UNIX或类UNIX中的分叉函数,

​ // fork函数将运行着的程序分成2个(几乎)完全一样的进程,

​ // 每个进程都启动一个从代码的同一位置开始执行的线程。

​ // 这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。

fork()的返回值

父进程返回的是子进程的pid,这个值大于0

子进程返回0;

父子进程执行逻辑

父进程执行pid>0的逻辑,子进程执行pid==0的逻辑

在这里插入图片描述

在这里插入图片描述

before fork打印一次 after fork 打印两次

man

man 是使用linux编程手册的命令

execl函数族

如果想在一个进程内部执行系统命令或者是应用程序,可以如下方式:先fork(),然后在子进程里面执行execl拉起可执行程序或者命令

pid =forl();

if (pid==0){execl(...);}

sample1执行系统命令

if(pid==0){

execl("/bin/ls",'"ls","-l",NULL);

}

sample2执行自己写的可执行程序

test.c内容

请添加图片描述

if(pid==0){

execl("./test",'"test","hello","world",NULL);

}
execvp()的基本语法

int execvp(const char* command, char* argv[]);

我们将commend称为PATH环境变量一部分的任何二进制可执行文件。 因此,如果要运行自定义程序,请确保将其添加到PATH变量中!

第二个参数( argv )表示command的参数列表。 这是一个char*字符串数组。

命令由于某种原因失败,则execvp()将返回-1。

waitpid()

原型

pid_t waitpid(pid_t pid,int* status,in options)

pid=-1等待任意子进程

pid>0等待进程id与pid相等的子进程

pid=0 … pid<-1…

status:子进程的退出状态–传出参数

请添加图片描述

options:设置位WNOFANG,函数非阻塞,设置为0,函数阻塞。

函数返回值

大于0返回回收掉的子进程id 等于-1无子进程 等于0 options==WNOFANG子进程正在进行

clock_gettime()

原型int clock_gettime(clockid_t clk_id, struct timespec *tp);

clockid_t clk_id 用于指定计时时钟的类型,有以下4种

CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变。

LOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响 CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间 CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间

struct timespect用来存储时间的结构,可以精确到纳秒,纳秒为一秒的十亿分之一。
 struct timespec 
 //精确到纳秒
{
    time_t tv_sec; //秒
    long tv_nsec;//纳秒
}

样例获取某段程序执行时间

int main(){
struct timespec begin;
struct timespec end;
clock_gettime(CLOCK_MONOTONIC, &begin);
{
执行的程序
}
clock_gettime(CLOCK_MONOTONIC, &end);
double time_ = end.tv_sec - begin.tv_sec + ((end.tv_nsec - begin.tv_nsec)/1000000000.0);
return 0;
}

ttime(CLOCK_MONOTONIC, &end);
double time_ = end.tv_sec - begin.tv_sec + ((end.tv_nsec - begin.tv_nsec)/1000000000.0);
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值