tôi có thể tạo một tập tin bằng cách sử dụng mã bên dưới:open() không thiết lập quyền tập tin một cách chính xác
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
const char* filename = "./test.out";
int fd;
if(-1 == (fd = open(filename, O_CREAT|O_RDWR, 0666)))
{
perror("Error");
errno = 0;
}
else
puts("File opened");
if(-1 == (close(fd)))
{
perror("Error");
errno = 0;
}
else
puts("File closed");
return 0;
}
tôi chỉ định đối số mode
như 0666
, cần nguồn vốn hỗ trợ đọc, viết truy cập vào tất cả mọi người. Tuy nhiên, một ls -l
lãm
-rw-r--r-- 1 kmehta users 0 2012-01-29 16:29 test.out
Như bạn thấy, hãy viết điều khoản chỉ được cấp cho chủ sở hữu của tập tin. Tôi không biết tại sao mọi người khác không được cấp quyền chính xác. chmod a+w test.out
đặt quyền một cách chính xác.
Mã biên soạn như gcc -Wall test.c
Specs: gcc v 4.5.0 trên OpenSUSE 11.3 64 bit
kiểm tra umask. kiểm tra umask. – wildplasser
Bạn đã thử sử dụng hằng số cho cờ, ví dụ: S_IRUSR, S_IRGRP, v.v.? – dasblinkenlight
@dasblinkenlight Sử dụng hằng số không giúp được gì. Đó là một vấn đề umask, sử dụng fchmod sau khi tập tin mở bây giờ như được hiển thị trong câu trả lời – jitihsk