On 28 April 2011 17:13, Sassan Panahinejad
<address@hidden> wrote:
It should be possible for guest applications to fstat a file for which they have a valid file descriptor, even if the file has been removed.
Demonstrated by the code sample below (fstat reports no such file or directory).
Strangely it seems that reading from a file in this state works fine (and when both are run, the server receives a different fid for each).
On any other filesystem, the code runs correctly. On our 9p filesystem it fails.
Many applications (including bash) depend on this working correctly.
I will continue investigating, but any thoughts anyone has on the subject would be appreciated.
Thanks
Sassan
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(void)
{
int ret;
struct stat statbuf;
int fd = open("test.txt", O_RDWR | O_CREAT, 0666);
if (fd < 0) {
printf("open failed: %m\n");
return 1;
}
ret = write(fd, "test1\n", 6);
if (ret < 0) {
printf("write1 failed: %m\n");
return 1;
}
ret = unlink("test.txt");
if (ret < 0) {
printf("unlink failed: %m\n");
return 1;
}
ret = fstat(fd, &statbuf);
if (ret < 0) {
printf("fstat failed: %m\n");
return 1;
}
return 0;
}