如何从Linux中的另一个进程触发一个进程?
收藏

我正在Linux上开发一个C应用程序。
为了清楚起见,我将问题转化为两个简单的程序:
prog1:创建一个文件并运行一个无限循环来读取它
程序2:将单词“hello”写入文件10次
无论何时将单词写入文件,prog1中的无限循环都会检测到它并简单地读取它。(两个代码都在末尾提到)。
问题是:prog1实际上尝试读取单词,然后在尝试再次读取之前睡眠1秒。我希望prog1在文件中写入“hello”后立即读取它(实时),如果可能的话,我希望去掉prog1中的无限while循环。
这个问题有什么专业的解决办法吗?像一个特殊的高优先级中断从prog2触发prog1?
谢谢。

/* Prog1 */
#define FIFO_FILE "MYFIFO"
int main (void)
{
    int fd;
    int read_bytes;
    char buf[6];

    mknod(FIFO_FILE, S_IFIFO|0640,0);

    while(1)
    {
        fd = open(FIFO_FILE, O_RDONLY);

        read_bytes = read(fd, buf, sizeof(buf));
        if(read_bytes == 0)
            break;

        buf[read_bytes] = '\0';

        printf("Received string is : %s \n", buf);

        sleep(1);
    }

    close(fd);

    return 0;
}

/* Prog2 */
#define FIFO_FILE "MYFIFO"
int main (void)
{
    int fd;
    int stringlen;
    int count = 0;
    char buf[6]={'H','e','l','l','o'};

    fd = open(FIFO_FILE, O_CREAT|O_WRONLY);

    while(count <= 10)
    {   
        stringlen = strlen(buf);
        buf[stringlen] = '\0';

        write(fd, buf, strlen(buf));
        printf("Sent String \n");

        count++;

        sleep(1);

    }

    close(fd);

    return 0;
}


最佳答案:

你想做的就是命令tail -f所做的。您可以查看its source code以查看专业解决方案。
另一方面,不应该使用sleep,而应该使用socket库中的poll

    公众号
    关注公众号订阅更多技术干货!