programing

함수의 암시적 선언 '닫힘'

closeapi 2023. 6. 25. 20:05
반응형

함수의 암시적 선언 '닫힘'

핸들과 연결된 파일을 닫고 싶은데 컴파일러에서 경고가 표시됩니다.

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);

이 경고가 표시되는 이유와 해결 방법은 무엇입니까?

다음은 완전한 소스 코드입니다.

주.c.

#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>

올바른 헤더를 포함했습니까?다음이 필요합니다.

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

하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다man open그리고.man close당신의 터미널에서 그들이 당신 자신을 위해 어떤 도서관이 필요한지 알기 위해.

언급URL : https://stackoverflow.com/questions/19472546/implicit-declaration-of-function-close

반응형