Добрый день. Нужно обмениваться данными между двумя приложениями - одно из них скомпилировано через wineg++. Без использования wineg++ проблем не возникает.
// LOCALSTATEDIR = "/usr/local/xstow/wtr/var/wtr"
// не вайн
int main()
{
int pipe = open(LOCALSTATEDIR "/pipe", O_WRONLY);
char buf[10];
if( write(pipe, buf, 10) != 10 )
throw std::logic_error("error");
std::cout << "write ok" << std::endl;
while(true);
return 0;
}
// вайн
int main()
{
mkfifo(LOCALSTATEDIR "/pipe", 0666);
int pipe = open(LOCALSTATEDIR "/pipe", O_RDONLY);
fd_set set;
FD_ZERO(&set);
FD_SET(pipe, &set);
char buf[10];
while(true)
{
Sleep(100);
timeval tval{0, 0};
switch( select(pipe + 1, &set, NULL, NULL, &tval) )
{
case 1:
std::cout << "\ncase == 1 - " << read(pipe, buf, 10) << std::endl;
break;
case 0:
// std::cout << "\ncase == 0 - ";
break;
default:
throw std::logic_error("error");
}
}
return 0;
}