file_filter.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dlfcn.h>
#define STRMAXLEN 301
const char path[] = "/home/changun/test";
const char word[] = "popensss";
typedef int (*new_open)(const char *pathname, int flags);
int open(const char *pathname, int flags)
{
void *handle = NULL;
new_open old_open = NULL;
handle = dlopen("libc.so.6", RTLD_LAZY);
old_open = (new_open)dlsym(handle, "open");
struct stat ststat;
if (stat(pathname, &ststat)==0)
{
if (S_ISREG(ststat.st_mode))
{
char pathbuf[STRMAXLEN];
if (pathname[0] != '/')
{
memset(pathbuf, 0, STRMAXLEN);
getcwd(pathbuf, STRMAXLEN);
if