当前位置:  技术问答>linux和unix

如何判断一个文件被其它进程占用

    来源: 互联网  发布时间:2016-09-18

    本文导语:  我有两个进程, A用来写文件, B用来读取A写的文件.  要求是, B不能读取这个文件, 直到A写全文件为止.  但现在的问题是, A进程是我不能控制的, 用exec打开的, 我没法在A进程里对文件上锁什么的.  那请问, 是否有...

我有两个进程, A用来写文件, B用来读取A写的文件. 
要求是, B不能读取这个文件, 直到A写全文件为止. 

但现在的问题是, A进程是我不能控制的, 用exec打开的, 我没法在A进程里对文件上锁什么的. 
那请问, 是否有办法在B进程中, 来判断这个文件是否被其它进程占用, 如果被占用着, 那就暂时不打开. 

谢谢!

|
     #include 

     FILE *
     popen(const char *command, const char *mode);

     int
     pclose(FILE *stream);



DESCRIPTION

     The popen() function ``opens'' a process by creating a bidirectional
     pipe, forking, and invoking the shell.  Any streams opened by previous
     popen() calls in the parent process are closed in the new child process.
     Historically, popen() was implemented with a unidirectional pipe; hence,
     many implementations of popen() only allow the mode argument to specify
     reading or writing, not both.  Because popen() is now implemented using a
     bidirectional pipe, the mode argument may request a bidirectional data
     flow.  The mode argument is a pointer to a null-terminated string which
     must be `r' for reading, `w' for writing, or `r+' for reading and writ-
     ing.

     The command argument is a pointer to a null-terminated string containing
     a shell command line.  This command is passed to /bin/sh, using the -c
     flag; interpretation, if any, is performed by the shell.

     The return value from popen() is a normal standard I/O stream in all
     respects, save that it must be closed with pclose() rather than fclose().
     Writing to such a stream writes to the standard input of the command; the
     command's standard output is the same as that of the process that called
     popen(), unless this is altered by the command itself.  Conversely, read-
     ing from a ``popened'' stream reads the command's standard output, and
     the command's standard input is the same as that of the process that
     called popen().

     Note that output popen() streams are fully buffered, by default.

     The pclose() function waits for the associated process to terminate; it
     returns the exit status of the command, as returned by wait4(2).



RETURN VALUES

     The popen() function returns NULL if the fork(2) or pipe(2) calls fail,
     or if it cannot allocate memory.

     The pclose() function returns -1 if stream is not associated with a
     ``popened'' command, if stream already ``pclosed'', or if wait4(2)
     returns an error.



|
lsof | grep filename
如果有输出(或者退出状态$?=0) 表示filename正在被操作
如果没输出(或者退出状态非0) 表示filename没在被操作

    
 
 

您可能感兴趣的文章:

  • shell如何判断当前进程是否是当天运行的进程?
  • 如何用shell语句(不用人为判断)kill掉进程列表中所有进程名为aaa的进程?
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊
  • 请教怎么根据进程输出的日记文件内容判断来重起进程?
  • 在UNIX下怎么做一个判断一个进程是否关闭?
  • 如何用函数判断某个守护进程处入运行中
  • 判断一个进程的状态
  • 请问如何判断从raw socket发出的包是哪个进程发送的?
  • 中断恢复现场时怎样判断进程运行到那一步,如何无缝连续运行的呢?
  • 有没有办法在打开一个文件之前判断当前是否有进程在使用(读或写)该文件
  • 怎么判断进程名相同
  • ScoOpenServer下的进程产生core,如何判断是哪个程序产生的?
  • 在有无操作系统的时候,如何判断一个进程的结束啊?
  • 在一个进程的主线程中如何判断自己创建的线程是否存在?
  • 在shell中如何判断一个进程是否存在?
  • 子进程怎么知道(判断)父进程被关闭了
  • 如何判断自己的进程是否正常启动
  • 知道pid,如何判断这个进程是否已经结束?
  • C语言 判断进程是否存在的问题
  • (在线等)在shell中如何写一个if语句判断一个进程是否存在
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux 下的自解压文件是什么格式,如何判断文件是否为自解压c++或者脚本判断均可
  • shell如何判断文件是否存在,如何判断变量是否为空
  • 请教:在程序中创建文件夹,应该用什么函数?怎么判断文件夹存不存在呢?
  • 怎样判断某个文件夹下的某个特大文件
  • 如何判断文件夹下的文件是否被修改
  • (高分)急!!!如何在DOS批处理文件中判断一个.TXT文件有没有记录(数据)
  • SOS 在 linux 中如何用命令来判断一个文件是否为链接文件
  • jsp中对文件操作,怎样判断是否已到文件尾?
  • 判断文件格式的c库函数
  • java判断远程服务器上的文件是否存在的方法
  • CSHELL如何完成这样的功能,判断一个文件夹下面是否存在文件??
  • 请问如何判断一个文件是不是可执行文件?
  • 请问如何判断一个文件夹是否存在
  • jquery判断上传文件类型与限制文件大小
  • 如何判断一个文件正处于打开状态?
  • 如何通过ip判断该ip地址是否有共享文件
  • 请问,如何用程序判断一个用ftp传输的文件已经完成?
  • 如果判断目录下一个文件已经存在与否?
  • 请问用什么方法能判断一个文件是否存在,谢谢!
  • 如何判断文件描述符合法?(Linux+C)
  • C++ Vectors 成员 empty():判断Vector是否为空(返回true时为空)
  • linux->shell-> if 条件判断,关于软连接的判断!
  • javascript操作html复选框checkbox:如何判断复选框是否被选中
  • 怎么判断串口已经收到数据,并及时读出?怎么判断串口已经将写入的数据发送完毕?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 在判断自符是否等于**时,用equals(“**”),那么如果我想判断它的值是否>=2该用什么呢?
  • java实现判断字符串是否全是数字的四种方法代码举例
  • 我是学pb的,判断闰年的是isdate("2-28"),但在java里怎么判断呢?
  • mysql中如何判断当前是字符 mysql判断字段中有无汉字
  • 知道TCP/UDP的包头,如何判断其应用层协议类型,struct tcphdr和 struct udphdr结构中那个变量能判断应用层协议类型。
  • c#判断字符是否为中文的三种方法分享(正则表达式判断)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3