我有2个简单的工作。第一是从管道读取。第二个是超时做一些操作。 问题是让它在一个过程中工作(我知道如何在2个过程中完成它,但它不适合我......)。
有一些理由不使用cron。 应该运行2个作业异步运行(彼此不阻塞)。
有什么想法吗?
#include<stdio.h>
#include<stdlib.h>
void someAnotherJob();
main(){
printf ("Hello!\n");
int c;
FILE *file, *file2;
file = fopen("/dev/ttyUSB0", "r");
file2 = fopen("out.txt", "a");
if (file) {
while ((c = getc(file)) != EOF){
fputc(c, file2);
fflush(file2);
}
fclose(file);
}
while (1) {
someAnotherJob();
sleep(10);
}
}
void someAnotherJob()
{
printf("Yii\n");
}
答案 0 :(得分:1)
您可以使用select从许多描述符执行非阻塞I / O:
fd_set rfds;
FD_ZERO(&rfds);
FILE* files[2];
if( !( files[0] = fopen( "/dev/ttyUSB0", "r"))
// error
if( !( files[1] = fopen( "out.txt", "a"))
// error
// for each file successfully opened
FD_SET( fileno( files[i]), &rfds);
int returned = select( highfd + 1, &rfds, NULL, NULL, NULL);
if ( returned) {
// for each file successfully opened
if ( FD_ISSET( fileno( files[i]), &rfds)) {
// read
printf( "descriptor %d ready to read", i);
}
}
}