80 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Test 14. unlinking an open file. */
 | |
| 
 | |
| #include <sys/types.h>
 | |
| #include <errno.h>
 | |
| #include <fcntl.h>
 | |
| #include <stdlib.h>
 | |
| #include <unistd.h>
 | |
| #include <stdio.h>
 | |
| 
 | |
| #define TRIALS 100
 | |
| #define MAX_ERROR 4
 | |
| 
 | |
| char name[20] = {"TMP14."};
 | |
| int errct;
 | |
| int subtest = 1;
 | |
| 
 | |
| _PROTOTYPE(int main, (void));
 | |
| _PROTOTYPE(void e, (int n));
 | |
| _PROTOTYPE(void quit, (void));
 | |
| 
 | |
| int main()
 | |
| {
 | |
|   int fd0, i, pid;
 | |
| 
 | |
|   printf("Test 14 ");
 | |
|   fflush(stdout);
 | |
| 
 | |
|   system("rm -rf DIR_14; mkdir DIR_14");
 | |
|   chdir("DIR_14");
 | |
| 
 | |
|   pid = getpid();
 | |
|   name[6] = (pid & 037) + 33;
 | |
|   name[7] = ((pid * pid) & 037) + 33;
 | |
|   name[8] = 0;
 | |
| 
 | |
|   for (i = 0; i < TRIALS; i++) {
 | |
| 	if ( (fd0 = creat(name, 0777)) < 0) e(1);
 | |
| 	if (write(fd0, name, 20) != 20) e(2);
 | |
| 	if (unlink(name) != 0) e(3);
 | |
| 	if (close(fd0) != 0) e(4);
 | |
|   }
 | |
| 
 | |
|   fd0 = creat(name, 0777);
 | |
|   write(fd0, name, 20);
 | |
|   unlink(name);
 | |
|   quit();
 | |
|   return(-1);			/* impossible */
 | |
| }
 | |
| 
 | |
| void e(n)
 | |
| int n;
 | |
| {
 | |
|   int err_num = errno;		/* save errno in case printf clobbers it */
 | |
| 
 | |
|   printf("Subtest %d,  error %d  errno=%d  ", subtest, n, errno);
 | |
|   errno = err_num;		/* restore errno, just in case */
 | |
|   perror("");
 | |
|   if (errct++ > MAX_ERROR) {
 | |
| 	printf("Too many errors; test aborted\n");
 | |
| 	chdir("..");
 | |
| 	system("rm -rf DIR*");
 | |
| 	exit(1);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void quit()
 | |
| {
 | |
| 
 | |
|   chdir("..");
 | |
|   system("rm -rf DIR*");
 | |
| 
 | |
|   if (errct == 0) {
 | |
| 	printf("ok\n");
 | |
| 	exit(0);
 | |
|   } else {
 | |
| 	printf("%d errors\n", errct);
 | |
| 	exit(1);
 | |
|   }
 | |
| }
 | 
