x me una cosa del genere funziona... bene!
in realtà non capisco da dove derivano i tuoi segmentation fault !

codice:
#include <stdio.h>

void open(char *);
void write(char *);

int main(int argc, char *argv[])
{
	if(argc != 3)
		printf("3");
	else{
		printf("\ninput %s",argv[1]); printf("\noutput %s",argv[2]); printf("\n");
      open(argv[1]);
		write(argv[2]);
	}
	return 0;
}

void open(char *op)
{
	FILE *in;
	in=fopen(op, "r");
	if(!in) { printf("no file found\n"); return;}
	//fai quello che devi fare
   fclose(in);
}

void write(char *wr)
{
	FILE *out;
	out=fopen(wr, "w");
	if(!out) { printf("no write file\n"); return; }
	//fai quello che devi fare
	fclose(out);
}