木目丶人言 发表于 2021-5-10 10:42:05

c读取文件达到scanf的等待效果

我想要让c程序一直读取文件的内容,如果有数据就读取,如果没数据就等待,达到scanf类似的效果,我知道能够用while循环一直判断来实现但是这样太耗cpu了,问下有没更好的解决方法。其实我想要实现的功能是两个c程序中的通讯,想socket,内存共享这些想着小题大做了,我只需要在本地实现两个c程序互相传输数据就行了,如果哪个大佬能够这样从根本帮我解决,我会非常感谢的。

人造人 发表于 2021-5-10 10:42:06

可以试试 命名管道

#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

// 父进程负责从标准输入读取数据,然后写到fifo
// 子进程负责从fifo读取数据,然后写到标准输出
int main(int argc, char *argv[]) {
    if(argc != 2) return -1;
    int fd;
    if(!strcmp(argv, "a")) {
      fd = open("fifo_0", O_RDONLY);
      fd = open("fifo_1", O_WRONLY);
    } else if(!strcmp(argv, "b")) {
      fd = open("fifo_0", O_WRONLY);
      fd = open("fifo_1", O_RDONLY);
    } else return -1;
    if(!fork()) {
      while(1) {
            char buff;
            ssize_t nbyte = read(fd, buff, 1024);
            write(1, buff, nbyte);
            if(nbyte == 0 || !strncmp(buff, "exit", 4)) {
                close(fd); close(fd); exit(0);
            }
      }
    }
    while(1) {
      char buff;
      ssize_t nbyte = read(0, buff, 1024);
      write(fd, buff, nbyte);
      if(nbyte == 0 || !strncmp(buff, "exit", 4)) {
            close(fd); close(fd); exit(0);
      }
    }
    return 0;
}





页: [1]
查看完整版本: c读取文件达到scanf的等待效果