diff --git a/src/cmd/cmp.c b/src/cmd/cmp.c
new file mode 100644
index 0000000..4f69e18
--- /dev/null
+++ b/src/cmd/cmp.c
@@ -0,0 +1,112 @@
+#include <u.h>
+#include <libc.h>
+
+#define		BUF		65536
+
+int sflag = 0;
+int lflag = 0;
+int Lflag = 0;
+
+static void usage(void);
+
+void
+main(int argc, char *argv[])
+{
+	int n, i;
+	uchar *p, *q;
+	uchar buf1[BUF], buf2[BUF];
+	int f1, f2;
+	vlong nc = 1, o, l = 1;
+	char *name1, *name2;
+	uchar *b1s, *b1e, *b2s, *b2e;
+
+	ARGBEGIN{
+	case 's':	sflag = 1; break;
+	case 'l':	lflag = 1; break;
+	case 'L':	Lflag = 1; break;
+	default:	usage();
+	}ARGEND
+	if(argc < 2)
+		usage();
+	if((f1 = open(name1 = *argv++, OREAD)) == -1){
+		if(!sflag) perror(name1);
+		exits("open");
+	}
+	if((f2 = open(name2 = *argv++, OREAD)) == -1){
+		if(!sflag) perror(name2);
+		exits("open");
+	}
+	if(*argv){
+		o = strtoll(*argv++, 0, 0);
+		if(seek(f1, o, 0) < 0){
+			if(!sflag) perror("cmp: seek by offset1");
+			exits("seek 1");
+		}
+	}
+	if(*argv){
+		o = strtoll(*argv++, 0, 0);
+		if(seek(f2, o, 0) < 0){
+			if(!sflag) perror("cmp: seek by offset2");
+			exits("seek 2");
+		}
+	}
+	if(*argv)
+		usage();
+	b1s = b1e = buf1;
+	b2s = b2e = buf2;
+	for(;;){
+		if(b1s >= b1e){
+			if(b1s >= &buf1[BUF])
+				b1s = buf1;
+			n = read(f1, b1s,  &buf1[BUF] - b1s);
+			b1e = b1s + n;
+		}
+		if(b2s >= b2e){
+			if(b2s >= &buf2[BUF])
+				b2s = buf2;
+			n = read(f2, b2s,  &buf2[BUF] - b2s);
+			b2e = b2s + n;
+		}
+		n = b2e - b2s;
+		if(n > b1e - b1s)
+			n = b1e - b1s;
+		if(n <= 0)
+			break;
+		if(memcmp((void *)b1s, (void *)b2s, n) != 0){
+			if(sflag)
+				exits("differ");
+			for(p = b1s, q = b2s, i = 0; i < n; p++, q++, i++) {
+				if(*p == '\n')
+					l++;
+				if(*p != *q){
+					if(!lflag){
+						print("%s %s differ: char %lld",
+						    name1, name2, nc+i);
+						print(Lflag?" line %lld\n":"\n", l);
+						exits("differ");
+					}
+					print("%6lld 0x%.2x 0x%.2x\n", nc+i, *p, *q);
+				}
+			}
+		}		
+		if(Lflag)
+			for(p = b1s; p < b1e;)
+				if(*p++ == '\n')
+					l++;
+		nc += n;
+		b1s += n;
+		b2s += n;
+	}
+	if(b1e - b1s == b2e - b2s)
+		exits((char *)0);
+	if(!sflag)
+		print("EOF on %s\n", (b1e - b1s > b2e - b2s)? name2 : name1);
+	exits("EOF");
+}
+
+static void
+usage(void)
+{
+	print("Usage: cmp [-lsL] file1 file2 [offset1 [offset2] ]\n");
+	exits("usage");
+}
