是在另一个应用程序中打开文件?

时间:2011-07-15 10:18:52

标签: c++ objective-c c xcode cocoa

我有办法告诉某个特定文件是否在另一个应用程序中打开了吗?

我想在我的应用程序中打开文件之前提供一个功能,我想知道该文件是否已经打开。

我想将其已经在另一个应用程序中打开的功能放在我的应用程序中,然后我的应用程序限制该文件再次打开它以保存信息丢失。

提前感谢...

3 个答案:

答案 0 :(得分:0)

此类任务存在文件锁定:

http://linux.die.net/man/2/flock

答案 1 :(得分:0)

在Linux上,您可以使用“lsof”查看文件是否已打开。

http://linux.about.com/library/cmd/blcmdl8_lsof.htm

答案 2 :(得分:0)

您现在必须已经实施了一些解决方案,但是,我理解您的设计的方式,我建议您反对它。

您应该允许用户打开文件并检查时间戳,以便在允许用户保存文件之前查明其是否已被修改(可能会询问用户是否覆盖文件或将其另存为新文件等。 )。

查看stat() API。

- 在打开文件之前记下时间戳(st_mtime,请参阅下面的结构)

- 让用户修改文件。

- 在用户保存文件之前,再次检查文件的时间戳st_mtime,如果不同,则向用户提问。

struct stat {
    dev_t     st_dev;     /* ID of device containing file */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* number of hard links */
    uid_t     st_uid;     /* user ID of owner */
    gid_t     st_gid;     /* group ID of owner */
    dev_t     st_rdev;    /* device ID (if special file) */
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
    time_t    st_atime;   /* time of last access */
    time_t    st_mtime;   /* time of last modification */
    time_t    st_ctime;   /* time of last status change */
};