- Prev
- SystemTap Beginners Guide
- Next

### ⁠3.5.6. Using Arrays in Conditional Statements

You can also use associative arrays in `if` statements. This is useful if you want to execute a subroutine once a value in the array matches a certain condition. Consider the following example:
⁠

Example 3.19. vfsreads-print-if-1kb.stp

    global reads
    probe vfs.read
    {
      reads[execname()] ++
    }

    probe timer.s(3)
    {
      printf("=======\n")
      foreach (count in reads-)
        if (reads[count] >= 1024)
          printf("%s : %dkB \n", count, reads[count]/1024)
        else
          printf("%s : %dB \n", count, reads[count])
    }

Every three seconds, Example 3.19, “vfsreads-print-if-1kb.stp” prints out a list of all processes, along with how many times each process performed a VFS read. If the associated value of a process name is equal or greater than 1024, the `if` statement in the script converts and prints it out in `kB`.
Testing for Membership
You can also test whether a specific unique key is a member of an array. Further, membership in an array can be used in `if` statements, as in:

    if([index_expression] in array_name) statement

To illustrate this, consider the following example:
⁠

Example 3.20. vfsreads-stop-on-stapio2.stp

    global reads

    probe vfs.read
    {
      reads[execname()] ++
    }

    probe timer.s(3)
    {
      printf("=======\n")
      foreach (count in reads+)
        printf("%s : %d \n", count, reads[count])
      if(["stapio"] in reads) {
        printf("stapio read detected, exiting\n")
        exit()
      }
    }

The `if(["stapio"] in reads)` statement instructs the script to print `stapio read detected, exiting` once the unique key `stapio` is added to the array `reads`.

- Prev3.5.5. Clearing/Deleting Arrays and Array Elements
- Up
- Home
- Next3.5.7. Computing for Statistical Aggregates