2013-01-07 60 views
0

我有這個c代碼創建一個文件。使用setfsuid()創建文件時出現分段錯誤?

#include <stdio.h> 
int main(int argc, char *argv[]) 
{ 
    FILE *fp; 
    fp=fopen("/home/sss/test3.file","w"); 
    fprintf(fp, "hi hi hi\n"); 
    fclose(fp); 
    return 0; 
} 

當我在文件fopen()調用之前添加setfsuid()命令並執行該程序時,出現分段錯誤。

#include <stdio.h> 
#incldde <unistd.h> 
int main(int argc, char *argv[]) 
{ 
    FILE *fp; 
    setfsuid(1002); 
    fp=fopen("/home/sss/test3.file","w"); 
    fprintf(fp, "hi hi hi\n"); 
    fclose(fp); 
    return 0; 
} 

setfsuid()命令需要root權限,我在一個帶有服務器操作系統的linux系統上。什麼可能導致這個問題?

回答

1

您需要檢查fopen的結果並確保它不是NULLsetfsuid更改用於文件系統訪問檢查的UID。此更改後,您可能沒有權限打開該文件進行寫入,導致fopen返回NULL。當您嘗試使用fprintf寫入文件時,這會導致segfault在使用它們之前,請務必檢查返回值。

相關問題