Linux编程学习摘记(3)

管道:
功能上,管道提供了一种在各个进程间大量传输信息的通道。能够有效完成数据共享和信息交换。
本质上,管道是一个特殊的文件。
分为PIPE(无名字)和FIFO(有名)两种。
与其它通信机制相比,如信号(Signal),消息传递(Message Passing)、共享内存比,有以下突出特点:
1)  方式简单,不需要考虑每次传送的长度。
2)  接受进程按需提取信息。
3)  接收和发送进程都能了解对方进程是否存在,因此相互协调工作。
无名管道:
1)  不占用文件目录项,没有文件路径名
2)  只能用于连接具有共同祖先的进程。
3)  依附进程临时存在,并不永久存在于系统中。
有名管道:
1)  永久性机构,用MKNOD命令创建。
2)  除非刻意删除,一直存在。
时间编程
time函数,用于返回1970年1月1日0点以来的秒数。
Ctime函数将上面数字转换成字符串。
使用Gettimeofday函数可以进行效率分析,下面是例子代码:
#include <stdio.h>
#include <math.h>
#include <sys/time.h>
void function()
{
unsigned int i , j;
double y;
for(i = 0;i < 1000;i ++)
for(j = 0;j < 1000;j ++)
y = sin((double) i );
}
void main(void)
{
struct timeval tpstart;
struct timeval tpend;
float timeuse;
gettimeofday(&tpstart,NULL);
function();
gettimeofday(&tpend,NULL);
timeuse = 1000000 * (tpend.tv_sec - tpstart.tv_sec)
+ (tpend.tv_usec - tpstart.tv_usec);
timeuse /= 1000000;
printf("Used Time:%f \n",timeuse);
exit(0);
}
如果需要使用时间间隔,则需要用到另外一些函数。
Getitimer
Setitimer
Which决定使用计时器中的哪一个。
下面是一个类似Windows下的Settimer事件的例子,每两秒钟有一个输出。
#include <stdio.h>
#include <math.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>
#define PROMPT "2 seconds passed \n\a"
char * prompt = PROMPT;
unsigned int len;
void prompt_info(int signo)
{
write(STDERR_FILENO,prompt,len);
}
void init_sigaction(void)
{
struct sigaction act;
act.sa_handler = prompt_info;
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGPROF,&act,NULL);
}
void init_time()
{
struct itimerval value;
value.it_value.tv_sec = 2;
value.it_value.tv_usec = 0;
value.it_interval = value.it_value;
setitimer(ITIMER_PROF,&value,NULL);
}
void main(void)
{
len = strlen(prompt);
init_sigaction();
init_time();
while(1);
exit(0);
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzwxyg.html