一个进程中的两个阻塞操作

时间:2014-11-19 09:17:06

标签: c ubuntu gcc aio

我有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");
}

1 个答案:

答案 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);
        }
    }
}