Date:        Wed, 28 Sep 2022 20:48:53 -0400
    From:        "David H. Gutteridge" <da...@gutteridge.ca>
    Message-ID:  <9c9c8e9d9384338320b47dabfdc94...@gutteridge.ca>

   
  | (O_CLOEXEC, on the other hand, is ignored, at the moment.)

No it isn't, your test is faulty, O_CLOEXEC is a different
kind of flag, applies at a different level, and is fetched
a different way.

That's what dholland@ tried to tell you a few days ago.

kre
  |
  | $ cat open_test.c
  | #include <fcntl.h>
  | #include <stdio.h>
  | #include <unistd.h>
  |
  | int main(int argc, char* argv[])
  | {
  |     int fd, flags;
  |
  |     printf("Regular file (read-only) with O_NONBLOCK | O_CLOEXEC.\n");
  |     if ((fd = open("/etc/release", O_RDONLY | O_NONBLOCK | O_CLOEXEC)) < 0)
  |             printf("Failed to get file handle.\n");
  |     else {
  |             printf("Descriptor flags: %d\n", flags = fcntl(fd, F_GETFD));
  |             printf("Status flags: %d\n", flags = fcntl(fd, F_GETFL, 0));
  |             close(fd);
  |     }
  |
  |     printf("POSIX pt cloning device with O_NONBLOCK | O_CLOEXEC.\n");
  |     if ((fd = open("/dev/ptmx", O_RDWR | O_NOCTTY | O_NONBLOCK | 
  | O_CLOEXEC)) < 0)
  |             printf("Failed to open /dev/ptmx.\n");
  |     else {
  |             printf("Descriptor flags: %d\n", flags = fcntl(fd, F_GETFD));
  |             printf("Status flags: %d\n", flags = fcntl(fd, F_GETFL, 0));
  |             close(fd);
  |     }
  |
  |     return 0;
  | }
  |
  | $ ./open_test
  | Regular file (read-only) with O_NONBLOCK | O_CLOEXEC.
  | Descriptor flags: 1
  | Status flags: 4
  | POSIX pt cloning device with O_NONBLOCK | O_CLOEXEC.
  | Descriptor flags: 0
  | Status flags: 6
  |
  | Regards,
  |
  | Dave
  |

Reply via email to