1: /*
2: * ln [ -f ] target [ new name ]
3: */
4:
5: #include <sys/types.h>
6: #include <sys/stat.h>
7: #include "stdio.h"
8: char *rindex();
9:
10: main(argc, argv)
11: char **argv;
12: {
13: struct stat statb;
14: register char *np;
15: int fflag = 0;
16: char nb[100], *name=nb, *arg2;
17: int statres;
18:
19: if (argc >1 && strcmp(argv[1], "-f")==0) {
20: argc--;
21: argv++;
22: fflag++;
23: }
24: if (argc<2 || argc>3) {
25: printf("Usage: ln target [ newname ]\n");
26: exit(1);
27: }
28: np = rindex(argv[1], '/');
29: if (np==0)
30: np = argv[1];
31: else
32: np++;
33: if (argc==2)
34: arg2 = np;
35: else
36: arg2 = argv[2];
37: statres = stat(argv[1], &statb);
38: if (statres<0) {
39: printf ("ln: %s does not exist\n", argv[1]);
40: exit(1);
41: }
42: if (fflag==0 && (statb.st_mode&S_IFMT) == S_IFDIR) {
43: printf("ln: %s is a directory\n", argv[1]);
44: exit(1);
45: }
46: statres = stat(arg2, &statb);
47: if (statres>=0 && (statb.st_mode&S_IFMT) == S_IFDIR)
48: sprintf(name, "%s/%s", arg2, np);
49: else
50: name = arg2;
51: if (link(argv[1], name)<0) {
52: perror("ln");
53: exit(1);
54: }
55: exit(0);
56: }
Defined functions
main
defined in line
10;
never used