Android 进程间使用管道通信

2020-12-25  本文已影响0人  Nothing_655f

Android 进程间使用管道通信
实现比较简单,直接上代码就可以理解了

#define PATH_CMD_FIFO          "/data/misc/my_fifo"

/* read pipe from path of PATH_CMD_FIFO
 * if read data from pipe, and then send data to uart port
 */
static void * read_fifo_thread(void *arg)
{
    int ret = 0;
    int fd = 0;
    char buf[512] = {0};

    ALOGD("%s Enter\n", __FUNCTION__);

    if (mkfifo(PATH_CMD_FIFO, O_CREAT | O_EXCL | 0777) < 0
        && errno != EEXIST) {
        ALOGE("%s creat fifo server error\n", __FUNCTION__);
        goto err_ret;
    }
    fd = open(PATH_CMD_FIFO, O_CREAT | O_RDONLY | O_NONBLOCK, 0);
    if (fd < 0) {
        ALOGE("%s open fd error=%s\n", __FUNCTION__, strerror(errno));
        goto err_ret;
    }
    ALOGD("%s fd:%d\n", __FUNCTION__, fd);

    while (!stop_flag) {
        memset(buf, 0x0, sizeof(buf));
        ret = read(fd, buf, sizeof(buf));
        if (ret > 0) {
            // Do something
        }
        usleep(1000*1000);
    }
err_ret:
    unlink(PATH_CMD_FIFO);
    pthread_exit(NULL);
}

1、注意 mkfifo 的时候的权限问题,我这边用的是 0777,根据对应的情况而定

2、检查是否生成了管道文件

可以看到在 /data/misc/my_fifo 有这个文件生成

3、读写调试

echo "hello world" > /data/misc/my_fifo

上面的线程中就可以读到这个信息

5、使用mkfifo bin调试

另外调试过程中可以直接在板子上使用mkfifo 命令

NAME
       mkfifo - make FIFOs (named pipes)

SYNOPSIS
       mkfifo [OPTION]... NAME...

DESCRIPTION
       Create named pipes (FIFOs) with the given NAMEs.

       Mandatory arguments to long options are mandatory for short options too.

       -m, --mode=MODE
              set file permission bits to MODE, not a=rw - umask

       -Z, --context=CTX
              set the SELinux security context of each NAME to CTX

       --help display this help and exit

       --version
              output version information and exit

AUTHOR
       Written by David MacKenzie.

REPORTING BUGS
       Report mkfifo bugs to bug-coreutils@gnu.org
       GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
       General help using GNU software: <http://www.gnu.org/gethelp/>
       Report mkfifo translation bugs to <http://translationproject.org/team/>

COPYRIGHT
       Copyright © 2013 Free Software Foundation, Inc.  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
       This is free software: you are free to change and redistribute it.  There is NO WARRANTY, to the extent permitted by law.

SEE ALSO
       mkfifo(3)

       The  full  documentation  for mkfifo is maintained as a Texinfo manual.  If the info and mkfifo programs are properly installed at your
       site, the command

              info coreutils 'mkfifo invocation'

       should give you access to the complete manual.
上一篇 下一篇

猜你喜欢

热点阅读