尝试附加到文件C时权限被拒绝
我正在尝试使用C打开文件并附加到它们。我正在根据进程Id动态命名目录,并根据循环中随机选择的“文件室”创建文件名。我的意图是打开文件,将文件室名称附加到文件中,然后关闭文件并移动到下一个文件室并执行相同的功能。我遇到的问题是“开放”。它似乎只返回-1,这表示有错误。错误消息说明“权限被拒绝”。我对此感到困惑,因为我似乎正在打开函数中设置正确的权限。我尝试使用fopen(),但这始终会产生分段错误11。我的roomFilePath声明和用法是否存在问题,或者我对open的用法是否不正确?下面是代码中包含问题的部分。makeRooms()函数用于检查文件是否正确打开。谢谢尝试附加到文件C时权限被拒绝,c,file,C,File,我正在尝试使用C打开文件并附加到它们。我正在根据进程Id动态命名目录,并根据循环中随机选择的“文件室”创建文件名。我的意图是打开文件,将文件室名称附加到文件中,然后关闭文件并移动到下一个文件室并执行相同的功能。我遇到的问题是“开放”。它似乎只返回-1,这表示有错误。错误消息说明“权限被拒绝”。我对此感到困惑,因为我似乎正在打开函数中设置正确的权限。我尝试使用fopen(),但这始终会产生分段错误11。我的roomFilePath声明和用法是否存在问题,或者我对open的用法是否不正确?下面是代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#define NUM_ROOMS 10
#define NUM_USED_ROOMS 7
#define MAX_CONNECTIONS 6
time_t t;
char* usedRooms[NUM_USED_ROOMS];
int i;
char directoryName[100];
char* baseDirectory = "walterer.rooms.";
int processId;
char roomFilePath[75];
int adjacencyMatrix[7][7] = {0};
int useableConnections;
int e;
int totConnections = 0;
int openRoom;
int file_descriptor;
char* roomNames[] = {
"cleveland",
"columbus",
"dallas",
"toledo",
"miami",
"sarasota",
"boston",
"chicago",
"denver",
"phoenix"
};
int connections[10] = {
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
};
void makeDirectory() {
processId = getpid();
sprintf(directoryName, "%s%d", baseDirectory,processId);
//printf("%s\n", directoryName);
mkdir(directoryName, 777);
}
void makeRooms() {
/* Initializes random number generator */
srand((unsigned) time(&t));
/* Create 7 rooms */
for(i = 0; i < NUM_USED_ROOMS; ){
/* Generate random number between 0 to 10 */
int randomNumber = rand() % NUM_ROOMS;
/* Loop as long the array does not contain any connections at the index */
while(connections[randomNumber] == 0) {
/* Append the room path to the end of my ONID path */
sprintf(roomFilePath,"%s/%s", directoryName, roomNames[randomNumber]);
printf("%s\n",roomFilePath);
/* Create file */
FILE *filePointer;
/* Open file to append*/
//filePointer = open(roomFilePath, O_WRONLY | O_CREAT, 0600);
//!!!Returning -1
file_descriptor = open(roomFilePath, O_APPEND, 0600);
printf("%d\n",file_descriptor);
if (file_descriptor == -1)
{
printf("open() failed on \"%s\"\n", roomFilePath);
perror("In createRooms()");
exit(1);
}
/*if (filePointer == NULL)
{
fprintf(stderr, "Error Creating File\n");
printf("something went wrong with read()! %s\n", strerror(errno));
}*/
/* Print the room name in the file */
/* SEG FAULT HERE!!!! */
fprintf(filePointer, "ROOM NAME: %s\n", roomNames[randomNumber]);
/* Close the file */
//fclose(filePointer);
usedRooms[i] = roomNames[randomNumber];
connections[randomNumber] = 1;
//printf("Room %d is %s \n", i+1, roomNames[randomNumber]);
i++;
}
}
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义房间数量10
#定义房间的使用数量7
#定义最大连接数6
时间;
char*usedRooms[NUM_USED_ROOMS];
int i;
char directoryName[100];
char*baseDirectory=“walterer.rooms。”;
int进程ID;
char roomFilePath[75];
int邻接矩阵[7][7]={0};
内部可用连接;
INTE;
int=0;
开放式室内;
int文件描述符;
char*roomNames[]={
“克利夫兰”,
“哥伦布”,
“达拉斯”,
“托莱多”,
“迈阿密”,
“萨拉索塔”,
“波士顿”,
“芝加哥”,
“丹佛”,
“凤凰”
};
int连接[10]={
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
};
void makeDirectory(){
processId=getpid();
sprintf(directoryName,“%s%d”,baseDirectory,processId);
//printf(“%s\n”,目录名);
mkdir(directoryName,777);
}
void makeRooms(){
/*初始化随机数生成器*/
srand((未签名)时间(&t));
/*创建7个房间*/
对于(i=0;i
首先,这一行中缺少了open()
所需的标志
参数的一部分:
file_descriptor = open(roomFilePath, O_APPEND, 0600);
/* SEG FAULT HERE!!!! */
fprintf(filePointer, "ROOM NAME: %s\n", roomNames[randomNumber]);
您传递的唯一open()
标志是O_APPEND
,但是open()
还需要至少一个O_RDONLY
、O_WRONLY
、O_RDWR
、O_EXEC
或O_SEARCH
标志。(后两个很少使用。)
您的代码应该类似于
file_descriptor = open(roomFilePath, O_RDONLY | O_APPEND, 0600);
Per:
简介
#include <sys/stat.h> #include <fcntl.h>
int open(const char *path, int oflag, ...);
filePointer
变量尚未在发布的代码中初始化,因此使用该值会导致分段错误。请尝试以管理员身份运行代码(.exe)。