44

我想关闭与句柄关联的文件,但我收到了来自编译器的警告:

main.c:96:2:警告:函数“关闭”的隐式声明 [-Wimplicit-function-declaration]

这是我的源代码:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>
...
int handle;
...
handle = open(path, flags, mode);
...
close(handle);

为什么我会收到此警告,我该如何解决?

这是完整的源代码:

主程序

#include "header.h"

// Prototypes
void menu(char choix);
void creer();
void lire();
int ouvrir(char *path, int flags, mode_t mode);

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

    char choix;
    int c;
    printf(PROGRAME_NAME, CYAN_BOLD,RESETCOLOR, CYAN_BOLD_BG, RESETCOLOR, CYAN_BOLD, RESETCOLOR);
    do{
        //printf("\e[1;1H\e[2J");
        printf("\n\n%sMenu :%s\n", RED_BOLD, RESETCOLOR); 
        printf("\t(%sC%s)réer un fichier\n", RED_BOLD, RESETCOLOR);
        printf("\t(%sL%s)ire un fichier\n", RED_BOLD, RESETCOLOR);
        printf("\t(%sE%s)crire sur un fichier\n", RED_BOLD, RESETCOLOR);
        printf("\t(%sS%s)upprimer un fichier\n",RED_BOLD, RESETCOLOR);
        printf("\t(%sQ%s)uitter\n",RED_BOLD, RESETCOLOR);
        do{
            printf("\n%sVotre choix :%s ",GREEN_BOLD,RESETCOLOR);
            do {
                c = getchar();
                choix = tolower(c);
            } while (c == '\n');
        }while((choix != 'c') && (choix != 'l') && (choix != 'e') && (choix != 's') && (choix != 'q'));

        menu(choix);
    }while(choix != 'q');

    return 0;
}


void menu(char choix){
    switch(choix){
        case 'c' :
            creer();
        break;
        case 'l' :
            lire();
        break;
        case 'e' : 
        break;
        case 's' : 
        break;
    }
}

void creer(){
    char path[64], name[64];
    char fullName[128];
    int fildes;
    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
    //~  O_RDONLY : Access Mode (Read Only)
    //~  O_CREAT : If the file does not exist it will be created
    //~  O_EXCL :  if this flag is specified in conjunction with O_CREAT, and pathname already exists, then open() will fail.
    int flags = O_RDONLY|O_CREAT|O_EXCL;
    printf("\n%s-->Donner l'emplacement du fichier :%s ", CYAN_NORMAL, RESETCOLOR);
    scanf("%s", path);
    printf("%s-->Donner le nom du fichier :%s ", CYAN_NORMAL, RESETCOLOR);
    scanf("%s", name);
    snprintf(fullName, sizeof fullName, "%s/%s", path, name);
    fildes = ouvrir(fullName, flags, mode);
    if(fildes == -1){
        printf("\n\t%sImpossible de créer le fichier. Réessayez plus tard. (%s)%s",RED_UNDERLINE,strerror(errno), RESETCOLOR);
    }else{
        printf("\n\t%sLe fichier %s a été créé avec succès.%s", CYAN_BOLD, fullName, RESETCOLOR);
    }
    close(fildes);
}


int ouvrir(char *path, int flags, mode_t mode)
{
        return open(path, flags, mode);
}

头文件.h

#include <stdio.h>
#include <fcntl.h> // open function
#include <unistd.h> // close function
#include "colors.h"
#include "const.h"
#include <ctype.h>
#include <errno.h>
#include <string.h>
4

1 回答 1

86

您是否包含正确的标题?您需要以下内容:

#include <fcntl.h> // for open
#include <unistd.h> // for close

man openman close在你的终端上找出他们自己需要的图书馆

于 2013-10-20T00:17:52.933 回答