2016-11-29 16 views
-1

так вот моя проблема:C - Объявите файл в функции параметров

int isopen() 
{ 
    int fd; 

    fd = open("myfile", O_RDONLY); 
    if (fd == 0) 
     printf("file opening error"); 
    if (fd > 0) 
     printf("file opening success"); 
    return(0); 
} 

int main(void) 
{ 
    isopen(); 
    return(0); 
} 

ли использовать этот код, чтобы проверить, если это открытая команда работала, так как я только начинаю lurn, как использовать его.

В основном этот код работает отлично, но я хотел бы объявить файл, который я хотел бы открыть непосредственно в параметрах моей функции isopen.

Я видел несколько других сообщений с использованием main и argv, но мне действительно нужно объявить мой файл в параметрах моей функции isopen, не используя argc & argv.

Возможно ли это?

Благодарим за помощь, я здесь совершенно потерян.

+0

Вы хотите сказать, имя файла жёстко? –

+0

@SouravGhosh Извините, но что такое хардкорное имя файла? –

+1

Предлагаю начать с чтения man-страницы для 'open()' и получить правильное возвращаемое значение, прежде чем сделать имя файла более общим. –

ответ

2

Ваш вопрос неясен, но, может быть, вы хотите:

int isopen(const char *filename) 
{ 
    int fd; 

    fd = open(filename, O_RDONLY); 
    if (fd < 0)       //BTW <<<<<<<<<<<< fd < 0 here !! 
     printf("file opening error"); 
    else         // else here 
     printf("file opening success"); 

    return(0); 
} 


int main(void) 
{ 
    isopen("myfile"); 
    return(0); 
} 

BTW, функция isopen как он стоит здесь еще довольно бесполезным, так как он просто открывает файл и выбрасывая fd.

+0

Большое вам спасибо! Это именно то, что мне нужно. Извините за неясные инструкции, я немного борюсь с английским, поскольку это не мой родной язык. И еще раз спасибо за небольшую помощь в моих условиях! –

+0

Это на самом деле хуже, чем бесполезно - он просачивает дескриптор файла, оставляя его открытым, и процесс имеет ограниченное количество доступных дескрипторов. –

0
#include <stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

int isOpen(char *filename) 
{ 
    return open(filename, O_RDONLY); 
} 

int main() 
{ 
    printf("%d\n", isOpen("/home/viswesn/file1.txt")); 
    printf("%d\n", isOpen("file2.txt")); 
    return 0; 
} 

Выход

[email protected]:~$ cat /home/viswesn/file1.txt 
    hello 
    [email protected]:~$ 
    [email protected]:~$ cat /home/viswesn/file2.txt 
    cat: /home/viswesn/file2.txt: No such file or directory 
    [email protected]:~$ 
    [email protected]:~$ ./a.out 
    3  <---------- File exist and it give file descriptor number '3' 
         STDIN-0, STDOUT-1, STDERR-2 are reserved and 
         next file opened will start with 3 and it keeps going 
    -1 <--------- File not found; so open gives -1 as error 
+0

Большое спасибо, ваш ответ очень ясен! –

+0

Добро пожаловать и не забудьте сказать «Этот ответ полезен»;) – Viswesn

+0

У меня недостаточно репутации, чтобы сделать это, извините! –