De nadas
La mejor manera de hacerlo es usando
memset para llenarlo de ceros:
Código:
memset(buf, 0, atoi(argv[2]);
Si lo queres hacer manualmente es la misma logica de tu codigo (aunque seria mejor solo calcular el resultado del atoi una vez):
Código:
buf[i] = '\0'; //"" es cadena, '' es caracter tambien podia ser buf[i] = 0;
Sobre la segunda pregunta no se como hacerlo, si es que se puede, le di una ojeada al viejo libro "UNIX Programacion Avanzada" y al menos si podes ver si es un ejecutable con stat y el campo st_mode.