linux c 删除一行数据
```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()`函数逐行读取文件内容,当前行是要删除的那行,就跳过不输出;否则就输出该行。
文件非常大,上述方法可能会消耗大量的内存,因为它次性将整个文件加载到内存中。这时可能采用其他策略,每次只读取和处理小部分文件。
多个进程试图修改同个文件,可能会出现竞态条件,导致文件损坏。为了防止这种情况,使用文件锁来确保间只有个进程能够修改文件。