summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher2020-05-28 23:21:35 +0200
committerJakob Unterwurzacher2020-05-28 23:23:53 +0200
commit22e3eec15302eac28c1a2ac3f9af29c2c9e82a3c (patch)
treef1e3311175a72aa2d8b0c19eb20fe1e5c5531af6
parentb275c53fa79c7acc555f382e0831c81491be3183 (diff)
getdents-debug: loop and stop on first error
Also try to improve and unify output a little. $ ./getdents /usr/share/man/man1 1: unix.Getdents: n=9984; n=9984; n=9968; n=9976; n=9984; n=9968; n=10000; n=9976; n=9992; n=10000; n=9976; n=9992; n=2312; n=0; err=<nil>; total 122112 bytes 2: unix.Getdents: n=9984; n=48; n=9976; n=9968; n=9976; n=9976; n=9992; n=9984; n=9992; n=10000; n=9976; n=9968; n=10000; n=2272; n=0; err=<nil>; total 122112 bytes 3: unix.Getdents: n=9984; n=9984; n=9968; n=704; n=10000; n=10000; n=9968; n=9968; n=9992; n=10000; n=9960; n=9992; n=9992; n=1600; n=0; err=<nil>; total 122112 bytes 4: unix.Getdents: n=9984; n=9984; n=9968; n=9976; n=9984; n=32; n=9992; n=9984; n=9992; n=10000; n=9976; n=9968; n=10000; n=2272; n=0; err=<nil>; total 122112 bytes $ ./getdents_c /usr/share/man/man1 1: getdents64: n=9984; n=9984; n=9968; n=9976; n=9984; n=9968; n=10000; n=9976; n=9992; n=10000; n=9976; n=9992; n=2312; n=0; errno=0 total 122112 bytes 2: getdents64: n=9984; n=9984; n=9968; n=9976; n=9984; n=9968; n=10000; n=9976; n=9992; n=10000; n=9976; n=9992; n=2312; n=0; errno=0 total 122112 bytes 3: getdents64: n=9984; n=9984; n=9968; n=9976; n=9984; n=9968; n=10000; n=9976; n=9992; n=10000; n=9976; n=9992; n=2312; n=0; errno=0 total 122112 bytes 4: getdents64: n=9984; n=9984; n=9968; n=9976; n=9984; n=9968; n=10000; n=9976; n=9992; n=10000; n=9976; n=9992; n=2312; n=0; errno=0 total 122112 bytes
-rw-r--r--contrib/getdents-debug/getdents/getdents.go18
-rw-r--r--contrib/getdents-debug/getdents_c/getdents.c41
2 files changed, 33 insertions, 26 deletions
diff --git a/contrib/getdents-debug/getdents/getdents.go b/contrib/getdents-debug/getdents/getdents.go
index cd1e49d..d7dac78 100644
--- a/contrib/getdents-debug/getdents/getdents.go
+++ b/contrib/getdents-debug/getdents/getdents.go
@@ -40,6 +40,7 @@ import (
"flag"
"fmt"
"os"
+ "time"
"golang.org/x/sys/unix"
)
@@ -50,11 +51,10 @@ const (
func main() {
flag.Usage = func() {
- fmt.Fprintf(os.Stderr, "Usage: %s [-loop] PATH\n", myName)
- fmt.Fprintf(os.Stderr, "Run getdents(2) on PATH\n")
+ fmt.Fprintf(os.Stderr, "Usage: %s PATH\n", myName)
+ fmt.Fprintf(os.Stderr, "Run getdents(2) on PATH in a 100ms loop until we hit an error\n")
os.Exit(1)
}
- loop := flag.Bool("loop", false, "Run in a loop")
flag.Parse()
if flag.NArg() != 1 {
flag.Usage()
@@ -62,14 +62,14 @@ func main() {
path := flag.Arg(0)
tmp := make([]byte, 10000)
- for {
+ for i := 1; ; i++ {
sum := 0
fd, err := unix.Open(path, unix.O_RDONLY, 0)
if err != nil {
- fmt.Printf("unix.Open returned err=%v\n", err)
- continue
+ fmt.Printf("%3d: unix.Open returned err=%v\n", err)
+ os.Exit(1)
}
- fmt.Printf("unix.Getdents: ")
+ fmt.Printf("%3d: unix.Getdents: ", i)
for {
n, err := unix.Getdents(fd, tmp)
fmt.Printf("n=%d; ", n)
@@ -83,8 +83,6 @@ func main() {
sum += n
}
unix.Close(fd)
- if !*loop {
- break
- }
+ time.Sleep(100 * time.Millisecond)
}
}
diff --git a/contrib/getdents-debug/getdents_c/getdents.c b/contrib/getdents-debug/getdents_c/getdents.c
index 98c2346..936bd0b 100644
--- a/contrib/getdents-debug/getdents_c/getdents.c
+++ b/contrib/getdents-debug/getdents_c/getdents.c
@@ -12,28 +12,37 @@
int main(int argc, char *argv[])
{
- if(argc < 2) {
+ if(argc != 2) {
printf("Usage: %s PATH\n", argv[0]);
- printf("Run getdents(2) on PATH\n");
+ printf("Run getdents(2) on PATH in a 100ms loop\n");
exit(1);
}
const char *path = argv[1];
- int fd = open(path, O_RDONLY);
- if (fd == -1) {
- perror("open");
- exit(1);
- }
- char tmp[10000];
- int sum = 0;
- for ( ; ; ) {
- int n = syscall(SYS_getdents64, fd, tmp, sizeof(tmp));
- printf("getdents64 fd%d: n=%d, errno=%d\n", fd, n, errno);
- if (n <= 0) {
- printf("total %d bytes\n", sum);
- break;
+ for (int i = 1 ; ; i ++ ) {
+ int fd = open(path, O_RDONLY);
+ if (fd == -1) {
+ perror("open");
+ exit(1);
+ }
+
+ char tmp[10000];
+ int sum = 0;
+ printf("%3d: getdents64: ", i);
+ for ( ; ; ) {
+ int n = syscall(SYS_getdents64, fd, tmp, sizeof(tmp));
+ printf("n=%d; ", n);
+ if (n <= 0) {
+ printf("errno=%d total %d bytes\n", errno, sum);
+ if (n < 0) {
+ exit(1);
+ }
+ break;
+ }
+ sum += n;
}
- sum += n;
+ close(fd);
+ usleep(100000);
}
}