linux下怎么找到占用某个文件的进程, 请写出c代码
时间: 2024-05-02 20:16:19 浏览: 14
在Linux下可以使用lsof命令查找哪个进程占用了某个文件,对应的C代码如下(需要root权限):
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define MAX_BUF_LEN 1024
int main(int argc, char *argv[]) {
char command[MAX_BUF_LEN];
char result[MAX_BUF_LEN];
char filename[MAX_BUF_LEN];
int fd;
if (argc != 2) {
fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
exit(EXIT_FAILURE);
}
snprintf(filename, MAX_BUF_LEN, "%s", argv[1]);
fd = open(filename, O_RDONLY);
if (fd == -1) {
fprintf(stderr, "Failed to open file %s: %s\n", filename, strerror(errno));
exit(EXIT_FAILURE);
}
snprintf(command, MAX_BUF_LEN, "lsof -p `lsof -t %s` | grep %s", getpid(), filename);
FILE *fp = popen(command, "r");
if (!fp) {
fprintf(stderr, "Failed to execute command %s: %s\n", command, strerror(errno));
exit(EXIT_FAILURE);
}
while (fgets(result, MAX_BUF_LEN, fp) != NULL) {
printf("%s", result);
}
pclose(fp);
close(fd);
return 0;
}
```
使用方法:
```
$ gcc find_process.c -o find_process
$ sudo ./find_process /path/to/file
```
该程序会输出占用该文件的进程信息。