Opening takes ms, reading takes usecs. To prevent the first call of read or write from taking an unusually long amount of time, you can open everything up front and close everything down at the end -- this can be especially bad in time critical code.
The API also helps keep your code organized and understandable: to put it simply, you dont *want* to make illogical code like that, so you follow the open read/write close pattern instead.