나는 c 매개 변수에 파일 이름과 파일에 대한 사용 권한이있는 함수를 작성해야합니다. (예 : create ("f", "rwxr_xr_x"))이 함수는 "rwxr_xr_x"권한을 받고 "0"을 반환하는 파일 f를 만듭니다. 파일이 이미 있거나 생성되지 않으면 0과 다른 번호를 반환합니다.리눅스에서 주어진 이름과 권한을 가진 파일을 만들려면 c
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
int create(char *name, char *mode)
{
int fp = fopen(name, "r+");
if (fp > 0)
{
int i, n = 0;
for (i = 0; i < 9; i = i + 3)
{
int nr = 0;
if (mode[i] == 'r') nr += 4;
if (mode[i + 1] == 'w') nr += 2;
if (mode[i + 2] == 'x') nr += 1;
n = n * 10 + nr;
}
chmod(name, n);
return 0;
}
else
return -1;
}
int main(int argc, char* argv[])
{
if (argc != 3) printf("%s\n", "Error: Incomplet number of arguments!");
int fp;
fp = create(argv[1], argv[2]);
if (fp == 0) printf("%s\n", "File successfully created!");
else printf("%s\n", "Could not create file!");
return 0;
}
나는 R + 모드에서 파일을 열려고 시도하고 난이) 맞다면 확실하지 {, 권한을 변경 chmod를 사용 : 는 여기에 내가 생각 해낸 코드입니다. 컴파일 할 때 다음과 같은 경고 메시지가 나타납니다. "초기화를하면 int fp=fopen(name, r+)
행의 캐스트가없는 포인터의 정수가됩니다. 누군가가이 문제를 해결하고 코드가 정확한지 알려주시겠습니까? 업데이트 그래서 몇 가지 변경 사항을 제안 했는데도 올바른 사용 권한을 제공하지 못한다고 생각합니다. (리눅스에 익숙하지 않았으므로 잘못되었을 수도 있습니다.) 다음은 현재 코드의 모습입니다 :
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
int create(char *name, char *mode)
{
int i,n=0;
for(i=0; i<9; i=i+3)
{
int nr=0;
if(mode[i]=='r') nr+=4;
if(mode[i+1]=='w') nr+=2;
if(mode[i+2]=='x') nr+=1;
n=n*8+nr;
}
int fl=creat(name, n);
printf("%d\n", n);
if(fl>0)
return 0;
else return -1;
}
int main(int argc, char* argv[])
{
if(argc != 3)
printf("%s\n", "Error: Incomplet number of arguments!");
int fp;
fp=create(argv[1], argv[2]);
if(fp==0) printf("%s\n", "File successfully created!");
else printf("%s\n", "Could not create file!");
return 0;
}
또한 파일이 이미 있는지 확인할 수 있습니까?이 경우 함수가 0과 다른 값을 반환하고 오류 메시지를 출력해야하기 때문에
이 라인
'fopen'은 int가 아닌'FILE *'을 반환하고'open'은'int'를 반환합니다. –
@PawanKartik : 질문은 디렉토리가 아닌 파일을 만드는 것과 관련이 있습니다. –
@Alexandra_p : [open/creat] (https://linux.die.net/man/2/creat)을 사용하지 않은 이유는 무엇입니까? –