Estoy tratando de leer un texto de un archivo y escribirlo en otro usando open()
, read()
y write()
.¿Por qué open() crea mi archivo con los permisos incorrectos?
Ésta es mi open()
para el archivo-a-escritura-a (Quiero crear un nuevo archivo y escribir en él):
fOut = open ("test-1", O_RDWR | O_CREAT | O_SYNC);
Esta es la creación de archivos en permisos a algo que yo no entender en absoluto. Esta es la salida de ls -l
:
---------T 1 chaitanya chaitanya 0 2010-02-11 09:38 test-1
Incluso el permiso de lectura está bloqueado. Intenté buscar esto, pero no pude encontrar NADA. Extrañamente, write()
aún escribe con éxito datos en el archivo.
Además, si hago un 'chmod 777 test-1', las cosas vuelven a funcionar correctamente.
¿Podría alguien decirme por favor dónde me estoy equivocando en mi llamada abierta?
Gracias!
Para su referencia, He pegado el programa completo a continuación:
#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;
}
Probablemente no necesite el permiso 777; probablemente solo necesite 666 a lo sumo, y generalmente tampoco desea permiso de escritura pública. No quiere que las personas ejecuten sus archivos de datos. –