LINUX.ORG.RU

создание файла(mkfifo)+Qt

 ,


0

1

Привет, Пытаюсь в цикле создавать файлы. Вызываемый код при создании:

...
for(int i = 0; i < 10; i++)
    {
        char tmpStrIn[35] = "/home/anton/mpich2/fifoData/gdbin";
        char tmpStrOut[36] = "/home/anton/mpich2/fifoData/gdbout";
        char str[2];
        sprintf(str, "%d", i);
        strcat(tmpStrIn, str);
        strcat(tmpStrOut, str);
        tmpStrIn[34] = 0;
        tmpStrOut[35] = 0;
        createFifo(tmpStrIn, tmpStrOut);
    }
...
void createFifo(char* _pathFifoIn, char* _pathFifoOut)
{
    char* pathFifoIn = new char[strlen(_pathFifoIn)];
    char* pathFifoOut = new char[strlen(_pathFifoOut)];
    memcpy(pathFifoIn, _pathFifoIn, strlen(_pathFifoIn));
    memcpy(pathFifoOut, _pathFifoOut, strlen(_pathFifoOut));

    unlink(pathFifoIn);
    if((mkfifo(pathFifoIn, S_IRUSR|S_IRGRP|S_IROTH|S_IWOTH|S_IWGRP|S_IWUSR)) == -1)
        fprintf(stderr, "Невозможно создать fifo.........\n");
    unlink(pathFifoOut);
    if((mkfifo(pathFifoOut, S_IRUSR|S_IRGRP|S_IROTH|S_IWOTH|S_IWGRP|S_IWUSR)) == -1)
        fprintf(stderr, "Невозможно создать fifo.........\n");
}
В итоге получается что некоторые файлы создаются с нормальным именем заданным программой, а в имя некоторых дописывается кракозябра и в скобках пишется неверная кодировка, в разных запусках кода это происходит с разными файлами. Что не так сделал?

Ответ на: комментарий от visual

Ничего не мешает.

Переписал так:

...
for(int i = 0; i < 10; i++)
    {
        QString tmpStrIn = "/home/anton/mpich2/fifoData/gdbin";
        QString tmpStrOut = "/home/anton/mpich2/fifoData/gdbout";
        tmpStrIn.append(QString::number(i));
        tmpStrOut.append(QString::number(i));
        createFifo((char*)tmpStrIn.toStdString().c_str(), (char*)tmpStrOut.toStdString().c_str());
    }
...
Проблема такая же

Antonavt
() автор топика
Ответ на: комментарий от visual

Тоже самое

Для пример в одном случае отработки кода один из файлов имеет вот такое имя: «gdbin2>плохие символы<(неверная кодировка)»

Проблема такая же

Antonavt
() автор топика
char* pathFifoIn = new char[strlen(_pathFifoIn) + 1];
memcpy(pathFifoIn, _pathFifoIn, strlen(_pathFifoIn) + 1);

Ноль-то дядя будет копировать за тебя что ли?

unC0Rr ★★★★★
()
Ответ на: комментарий от Antonavt
tmpStrIn.toStdString().c_str()

Да откуда вы такие берётесь? Третий раз вижу, что QString преобразуют в std::string, чтобы получить char *. Ну не звездец ли? А если Qt собран без поддержки STL? Сделай лучше

tmpStrIn.toUtf8().constData()

И вообще, что тебе мешает сразу передать в mkfifo нужный буфер из QString, обойдясь без сишного кода вообще?

unC0Rr ★★★★★
()
Ответ на: комментарий от zJes

equivalent to str.toLocal8Bit().constData()

То же самое. Спасибо, не знал.

unC0Rr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.