LINUX.ORG.RU

[C/C++] как такое распарсить O_LARGEFILE | O_TRUNC


0

1

Все доброго времени суток. Родился такой вопрос, поскольку сам ни разу не использовал, но вижу в реализациях.

К примеру функцию open можно вызвать с параметром flags равным O_WRONLY | O_CREAT | O_LARGEFILE. А как собственно это потом проверять в функции?

p/s даже не знаю как гуглить этот вопрос

Заранее спасибо!

★★★★★

Так вы же открываете - зачем что-то проверять?

Eddy_Em ☆☆☆☆☆
()

Вопрос непонятен все равно.

Конструкция O_WRONLY | O_CREAT | O_LARGEFILE устанавливает биты, а O_WRONLY — это просто константы, отвечающие нужному биту в переменной flags

annoynimous ★★★★★
()

man fcntl Это?
Задавай вопрос нормально, если не можешь объяснить, тогда приводи примеры.

rg-400
()

cyclon, вы бы все-таки объяснили, в каких ситуациях может понадобиться в программе, открывающей какой-то файл, проверять, с какими флагами этот файл открыт?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от rg-400

ну вот я и привожу как пример функцию open...

хорошо, вот мой пример

есть функция проверяющая состояние некоторого флага и что-то делающего в зависимости от него

int check_flag(int state)
{
    switch(state){
          case BIG:
                    //....
                    break;
          case MID:
                    //....
                    break;
          case SMALL:
                    //....
                    break;
    }
}

далее я её вызываю:

check_flag(BIG);           // первый вызов
check_flag(MID | SMALL);   // второй вызов

т.е. второй вывзов это то что хотелось бы добиться не создавая для этого функцию с двумя параметрами

int check_flag(int state1, int state2)

...т.е. так же как и в open, можно используя | передать несколько состояний

cyclon ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em
...
sk = socket(PF_INET, SOCK_STREAM, 0);
...
fcntl(sk, F_SETFL, fcntl(sk, F_GETFL) | O_NONBLOCK);
rg-400
()
Ответ на: комментарий от Eddy_Em

Может если дескриптор был унаследован или например по unix сокету получен (т.е фиг его знает как его открыли).

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

trueЪ-way:

union my_flags_type {
  int as_int;
  struct {
    int largefile:1;
    int trunc:1;
    int blahblah:1;
  };
};
legolegs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.