C言語でchmodコマンドを書きたい

■要求定義
– ファイルやフォルダのアクセス権限を変更する

e.g.
$ ls -l
-rw-rw-r– 1 vagrant vagrant 89 May 17 11:50 sample.txt
$ chmod 777 sample.txt
$ ls -l
-rwxrwxrwx 1 vagrant vagrant 89 May 17 11:50 sample.txt

#include <stdio.h>
#include <sys/stat.h>

int main(void){

	FILE *fp = "./sample.txt";

	chmod(fp, 666);

	return 0;
}

これでは上手く行かない。

#include <stdio.h>
#include <sys/stat.h>

int main(int argc, char**argv){

	char ans;
	int return_code = 0;

	if(argc == 2){
		printf('%sに実行許可を与えます。宜しいでしょうか(y/n)==>', *(argv+1));
		scanf('%c', &ans);

		if(ans == 'y' || ans == 'Y'){
			if(chmod(*(argv+1),
				S_IRUSR | S_IWUSR | S_IXUSR | /* S_IRUSR 00400, S_IWUSR 00200, S_IXUSR 00100 rwx*/
				S_IRGRP | S_IXGRP | /*IRGRP 00040 r-x, IXGRP 00010 */
				S_IROTH | S_IXOTH) == 0) { /*IROTH 00004, S_IXOTH 00001 */
				printf('実行許可を与えました。\n');
			} else {
				printf("実行許可を与えられませんでした\n");
				perror("");
				return 1;
			}
		} else {
			printf("キャンセルします。\n");
		}
	} else {
		printf("実行時引数の数が不正です。\n");
		return 2;
	}

	return 0;
}

■mode一覧
S_ISUID 04000:実行時のセット・ユーザー・ID(set user ID)。
S_ISGID 02000:実行時のセット・グループ・ID(set group ID)。
S_ISVTX 01000:スティッキー(sticky)ビット。
S_IRUSR 00400:所有者(owner)による読み取り(read)。
S_IWUSR 00200:所有者による書き込み(write)。
S_IXUSR 00100:所有者による実行(execute)・検索(search)。
S_IRGRP 00040:グループ(group)による読み取り。
S_IWGRP 00020:グループによる書き込み。
S_IXGRP 00010:グループによる実行・検索。
S_IROTH 00004:他人(others)による読み取り。
S_IWOTH 00002:他人による書き込み。
S_IXOTH 00001:他人による実行・検索。