Я новичок в программировании на C ++ и пытаюсь использовать команду mkfifo
для создания именованного канала, который я могу прочитать из моей программы java. Вот мой код:
int main(int, char **)
{
std::cout << "START" << std::endl;
int fd;
// FIFO file path
char *myfifo = "/sdcard/tempFifo";
// Creating the named file(FIFO)
// mkfifo(<pathname>, <permission>)
int ret = mkfifo(myfifo, 0666);
std::cout << "mkfifo ret " << ret << std::endl;
std::cout << "errno " << errno << std::endl;
std::cout << "errno str::" << std::strerror(errno) << std::endl;
char arr1[80];
int startCount = 0;
while (1)
{
// Open FIFO for Read only
std::cout << "Opening FIFO.." << std::endl;
fd = open(myfifo, O_RDONLY);
// Read from FIFO
std::cout << "Start reading.." << std::endl;
read(fd, arr1, sizeof(arr1));
if (strcmp(arr1, "start") == 0)
{
if (startCount == 1)
{
std::cout << "Start count is greater than one so exit." << std::endl;
return 0;
}
startCount++;
std::cout << "Start received" << std::endl;
}
sleep(5000);
close(fd);
}
std::cout << "STOP" << std::endl;
return 0;
}
Чтобы написать "start" на целевой трубе, я использую код java как:
File file = new File("/sdcard/tempFifo");
FileOutputStream fileOutputStream = new FileOutputStream(file);
PrintWriter printWriter = new PrintWriter(fileOutputStream);
printWriter.print("start");
printWriter.flush();
printWriter.close();
Я получаю Exception: /sdcard/tempFifo: open failed: ENOENT (No such file or directory)
в java Приложение и когда я выполнил ls -l /sdcard/tempFifo
на оболочке adb, я не смог увидеть файл tempFifo на моей SD-карте телефона с рутом.
Кто-нибудь знает, в чем проблема в моем коде?
Обновление на errno
mkfifo ret -1
errno 22
errno str::Invalid argument