#include #include #include #include #include int main(int argc, char *argv[]) { char buf[1]; int max, loop, fd, tmp, rw; fd = open("/proc/rwsem",O_RDWR); if (fd<0) { perror("open"); return 1; } max = (argc>1) ? atoi(argv[1]) : 50; rw = max<0; max = abs(max); for (loop=max; loop>0; loop--) { switch (fork()) { case -1: perror("fork"); return 1; case 0: rw ? write(fd," ",1) : read(fd,buf,1); exit(1); default: break; } } for (loop=max; loop>0; loop--) { if (wait(&tmp)<0) { perror("wait"); return 1; } } return 0; }