编写一个文件拷贝程序,复制/etc/passwd前10行到当前目录下,改名为temp.txt; 提示:Linux下的换行符是'\n'; 编写makefile文件,以完成编译、链接,最后运行。
时间: 2024-11-09 20:21:41 浏览: 20
linux下/etc/passwd文件的选项说明
首先,我们来编写一个简单的C程序,用于读取`/etc/passwd`文件的前10行,并将其内容保存到一个新的文本文件`temp.txt`。
```c
#include <stdio.h>
#include <string.h>
#define MAX_LINES 10
#define BUF_SIZE 256
void copy_first_lines(const char *filename, char *output_file, int lines) {
FILE *input = fopen("/etc/passwd", "r");
FILE *output = fopen(output_file, "w");
if (!input || !output) {
perror("Failed to open files");
return;
}
for (int i = 0; i < lines && fgets(buffer, BUF_SIZE, input); i++) {
fprintf(output, "%s", buffer);
buffer[strlen(buffer) - 1] = '\0'; // Remove newline from fgets
if (i != lines - 1) {
fprintf(output, "\n"); // Write a newline after each line except the last one
}
}
fclose(input);
fclose(output);
}
int main() {
char output_file[] = "temp.txt";
copy_first_lines(NULL, output_file, MAX_LINES);
return 0;
}
```
现在,我们需要编写`Makefile`来编译、链接和运行这个程序:
```makefile
CC = gcc
CFLAGS = -g
OUTPUT_FILE = temp.txt
EXECUTABLE = copy_password
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
$(EXECUTABLE): $(OUTPUT_FILE).o
$(CC) $(CFLAGS) $(OUTPUT_FILE).o -o $@
$(OUTPUT_FILE).o: $(OUTPUT_FILE).c
$(CC) $(CFLAGS) -c $(OUTPUT_FILE).c -o $@
run: $(EXECUTABLE)
./$<
clean:
rm -f $(EXECUTABLE) $(OUTPUT_FILE).*
.PHONY: clean run
```
在`Makefile`中,`.PHONY:`指令告诉`make`不依赖于`clean`和`run`目标的文件存在。`clean`规则用于删除编译生成的中间文件,而`run`则直接执行程序。
使用`make`命令编译并运行程序:
```sh
$ make
$ make run
```
这将会复制`/etc/passwd`的前10行到`temp.txt`文件,然后执行程序。如果你看到`temp.txt`文件已创建并且内容正确,说明程序已经成功执行了。
阅读全文