Как использовать pipe () и fcntl () в Windows с mingw64? - PullRequest
0 голосов
/ 11 июня 2019

Я портирую программу с Linux на Windows, используя Mingw64. Он хорошо компилируется, но теперь я пытаюсь запустить тесты, и я получил несколько предупреждений, таких как implicit declaration of function 'pipe'" (and 'fcntl'), -fPIC ignored for target ... и более проблемных, таких как F_GETFD undeclaredF_SETFD, O_NONBLOCK).

Что я сделал на данный момент:

Я обнаружил, что все они должны быть включены в fcntl.h и unistd.h, которые правильно включены в файл .c. Я также мог найти их в Mingw64 (хотя есть еще один unistd.h файл ...), поэтому я не получаю никакой ошибки в части «include». Однако ни один из этих файлов не определяет функцию канала, ни функцию fcntl, ни какую-либо F_GETFD и так далее.

Поскольку оба заголовка включают io.h, я тоже посмотрел на io.h. У него есть функция _pipe, но с 3 аргументами, тогда как у функции, используемой в моем файле .c, только 2, так что, вероятно, это не то же самое.

Я искал в сети, но у большинства людей с такой же проблемой просто не было заголовков. Я также нашел ответ, в котором говорилось о переписывании кода с использованием «эквивалентных» функций Windows, но сначала я не писал файлы c. Возможно, я смогу понять, что он делает, и, возможно, через некоторое время я смогу переписать его, но, поскольку у меня есть среда Mingw, предоставляющая заголовки, я думаю, что я смогу использовать эти функции pipe() и fcntl(). , И это было бы быстрее, чем переписать этот с ...

Что у меня есть:

Мне не разрешено показывать код, и, кроме того, я не думаю, что он будет чем-то полезен, поскольку единственная проблема состоит в том, что есть некоторые функции pipe (), fcntl () и F_GETFD, F_SETFD, O_NONCLOCK , написал в нем, что не может быть найдено в заголовочных файлах.

Заголовки Mingw64, их можно найти здесь:

https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/crt/unistd.h

https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/crt/fcntl.h

https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/crt/io.h

Что бы я хотел иметь:

Поскольку у меня все еще есть среда Linux, в которой эти файлы использовались, я взглянул на файлы fcntl.h и unistd.h; они определенно не одинаковы. В частности, в них правильно определены функции fcntl () и pipe (). И fcntl.h включает в себя другой fcntl-linux.h, который определяет F_GETFD и другие.

Как это можно получить в среде Mingw64?

...