| /* Check that the syscalls implementing fdopen work trivially. */ |
| |
| #include <stdio.h> |
| #include <string.h> |
| #include <stdlib.h> |
| #include <sys/stat.h> |
| #include <fcntl.h> |
| |
| void |
| perr (const char *s) |
| { |
| perror (s); |
| exit (1); |
| } |
| |
| int |
| main (void) |
| { |
| FILE *f; |
| int fd; |
| const char fname[] = "sk1test.dat"; |
| const char tsttxt1[] |
| = "This is the first and only line of this file.\n"; |
| char buf[sizeof (tsttxt1)] = ""; |
| |
| fd = open (fname, O_WRONLY|O_TRUNC|O_CREAT, S_IRWXU); |
| if (fd <= 0) |
| perr ("open-w"); |
| |
| f = fdopen (fd, "w"); |
| if (f == NULL |
| || fwrite (tsttxt1, 1, strlen (tsttxt1), f) != strlen (tsttxt1)) |
| perr ("fdopen or fwrite"); |
| |
| if (fclose (f) != 0) |
| perr ("fclose"); |
| |
| fd = open (fname, O_RDONLY); |
| if (fd <= 0) |
| perr ("open-r"); |
| |
| f = fdopen (fd, "r"); |
| if (f == NULL |
| || fread (buf, 1, sizeof (buf), f) != strlen (tsttxt1) |
| || strcmp (buf, tsttxt1) != 0 |
| || fclose (f) != 0) |
| { |
| printf ("fail\n"); |
| exit (1); |
| } |
| |
| printf ("pass\n"); |
| exit (0); |
| } |