1 /* Test for fdopen bugs. */ 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <unistd.h> 6 #include <fcntl.h> 7 8 #undef assert 9 #define assert(x) \ 10 if (!(x)) \ 11 { \ 12 fputs ("test failed: " #x "\n", stderr); \ 13 retval = 1; \ 14 goto the_end; \ 15 } 16 17 char buffer[256]; 18 19 int main(int argc,char * argv[])20main (int argc, char *argv[]) 21 { 22 char name[] = "/tmp/tst-fdopen.XXXXXX"; 23 FILE *fp = NULL; 24 int retval = 0; 25 int fd; 26 27 fd = mkstemp (name); 28 if (fd == -1) 29 { 30 printf ("mkstemp failed: %m\n"); 31 return 1; 32 } 33 close (fd); 34 fp = fopen (name, "w"); 35 assert (fp != NULL) 36 fputs ("foobar and baz", fp); 37 fclose (fp); 38 fp = NULL; 39 40 fd = open (name, O_RDONLY); 41 assert (fd != -1); 42 assert (lseek (fd, 5, SEEK_SET) == 5); 43 /* The file position indicator associated with the new stream is set to 44 the position indicated by the file offset associated with the file 45 descriptor. */ 46 fp = fdopen (fd, "r"); 47 assert (fp != NULL); 48 assert (getc (fp) == 'r'); 49 assert (getc (fp) == ' '); 50 51 the_end: 52 if (fp != NULL) 53 fclose (fp); 54 unlink (name); 55 56 return retval; 57 } 58