Sto cercando di leggere del testo da un file e scriverlo su un altro utilizzando open()
, read()
e write()
.Perché open() crea il mio file con le autorizzazioni sbagliate?
Questo è il mio open()
per il file-to-write-a (voglio creare un nuovo file e scrivere in esso):
fOut = open ("test-1", O_RDWR | O_CREAT | O_SYNC);
Questa è la creazione di file-autorizzazioni per qualcosa che non so capire a tutti. Questa è l'uscita di ls -l
:
---------T 1 chaitanya chaitanya 0 2010-02-11 09:38 test-1
Anche l'autorizzazione di lettura è bloccata. Ho provato a cercare questo, ma non ho trovato nulla. Stranamente, write()
scrive ancora correttamente i dati nel file.
Inoltre, se eseguo un 'chmod 777 test-1', le cose riprendono a funzionare correttamente.
Qualcuno potrebbe farmi sapere dove sto andando male nella mia chiamata aperta?
Grazie!
Per il vostro riferimento, ho incollato il programma completo qui sotto:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
char buffer[512], ch;
int fIn, fOut, i;
ssize_t bytes;
FILE *fp = NULL;
//open a file
fIn = open ("test", O_RDONLY);
if (fIn == -1) {
printf("\nfailed to open file.");
return 1;
}
//read from file
bytes = read (fIn, buffer, sizeof(buffer));
//and close it
close (fIn);
printf("\nSuccessfully read %d bytes.\n", bytes);
//Create a new file
fOut = open ("test-1", O_RDWR | O_CREAT | O_SYNC);
printf("\nThese are the permissions for test-1\n");
fflush(stdout);
system("ls -l test-1");
//write to it and close it.
write (fOut, buffer, bytes);
close (fOut);
//write is somehow locking even the read permission to the file. Change it.
system("chmod 777 test-1");
fp = fopen ("test-1", "r");
if (fp == NULL) {
printf("\nCan't open test-1");
return 1;
}
while (1)
{
ch = fgetc(fp);
if (ch == EOF)
break;
printf("\n%c", ch);
}
fclose (fp);
return 0;
}
Probabilmente non è necessario il permesso 777; probabilmente hai solo bisogno di 666 al massimo, e di solito non vuoi neanche un permesso di scrittura pubblico. Non vuoi che le persone eseguano i tuoi file di dati. –