2015-02-19 16 views
5

gcc ile x86_64 GNU/Linux kullanıyorum. man -s2 open ait
ÖZET bölümü diyor ki:open() sistem çağrısı üstbilgisi dosyası gereksinimleri

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

int open(const char *pathname, int flags); 
int open(const char *pathname, int flags, mode_t mode); 
int creat(const char *pathname, mode_t mode); 

Şimdi aşağıdaki kod parçacığını derlemeye çalıştığınızda, gcc bir uyarı/hata atmak değil.

#include <stdio.h> 
#include <fcntl.h> 

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

    fd = open("foo.txt", O_RDWR, 0777); 
    if(fd == -1) 
     perror("open"); 

    fd = creat("foo.txt", 0777); 
    if(fd == -1) 
     perror("creat"); 

    close(fd); 
    return 0; 
} 

Yani types.h ve stat.h isteğe bağlıdır? open()'un manpage'inde hangi amaca hizmet ediyorlar?

+0

Check fcntl.h' - 'types.h' ve' stat.h' – user590028

+0

dahil olduğunu varsayalım ' ve '' içerir. Ama hala neden "" ve "" nin "man -s2 open" içinde olduğunu anlamıyorum. – rootkea

+0

Durumunuzu belirttiğinizden beri, -Wall' ile derlediniz mi? Değilse, bunu yapın ve uyarılar için kontrol edin. – DoxyLover

cevap

4

Bu sayfa, hem programcılara hem de derleyici üreticilerine talimatlar sunmaktadır.

Sisteminizde üzerine onlara dahil etmemeye ihtiyacını yapmak mümkündür. Ancak, man sayfası, yöntemleri kullanmanın taşınabilir bir yolunu açıklar, dolayısıyla bunları zaten içermelisiniz.

+0

Test edilemeyen başka bir sistemim olmadığı için, "" ve "" gereksinimlerinin sistemden sisteme değişip değişmediğini doğrulayamıyor. Bu başlıklara ihtiyaç duyan herhangi bir sistem örneği verebilir misiniz, çünkü bunu _may be __ be __ be _e_ – rootkea

+2

@rootkea: Genel olarak, işler * değişir *. KlasLindbäck'in dediği gibi, manpage bunun nasıl yapılacağını belirtir * portably * ve buna bağlı kalmalısınız (çünkü hepsinden ötürü, ihtiyaç duyulmadıkça bu ekstraları içermesi için hiçbir şeye mal olmaz, ancak kodunuz derlenmez veya Daha da kötüsü, eğer * gerekli * ve siz eklemediyseniz, UB'yi çağırır. –

İlgili konular