linux c 删除一行数据

2024-02-15 17:09:04

```c

#include

#include

#define MAX_LEN

int main(int argc, char *argv[]) {

if (argc != ) {

printf("Usage: %s filename line_num\n", argv[]);

return -;

}

int line_num = atoi(argv[]) - ; // 减是因为C语言的数组下标是从开始的

FILE *fp = fopen(argv[], "r");

if (!fp) {

perror("fopen failed");

return -;

}

char *line = NULL;

size_t len = ;

ssize_t read;

int count = ;

fp = freopen(NULL, "w+", stdout);

while ((read = getline(&line, &len, fp)) != -) {

if (count == line_num)

continue;

printf("%s", line);

free(line);

line = NULL;

count++;

}

fclose(fp);

return ;

}

```

要操作的文件名和要删除的行号(从开始计数)。它使用`getline()`函数逐行读取文件内容,当前行是要删除的那行,就跳过不输出;否则就输出该行。

文件非常大,上述方法可能会消耗大量的内存,因为它次性将整个文件加载到内存中。这时可能采用其他策略,每次只读取和处理小部分文件。

多个进程试图修改同个文件,可能会出现竞态条件,导致文件损坏。为了防止这种情况,使用文件锁来确保间只有个进程能够修改文件。