49 lines
1.4 KiB
C
49 lines
1.4 KiB
C
|
/*
|
|||
|
编写一个程序,使用open系统调用打开一个已存在的文件,并使用lseek系统调用将文件指针移动到文件末尾,然后使用write系统调用将用户从控制台输入的内容追加到文件末尾
|
|||
|
【提示】man 2 lseek 查看帮助信息
|
|||
|
off_t lseek(int fd, off_t offset, int whence);
|
|||
|
whence: SEEK_SET, SEEK_CUR, SEEK_END
|
|||
|
*/
|
|||
|
#include <stdio.h>
|
|||
|
#include <sys/types.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <fcntl.h>
|
|||
|
#include <sys/stat.h>
|
|||
|
#include <string.h>
|
|||
|
|
|||
|
int main(int argc, char const *argv[])
|
|||
|
{
|
|||
|
int fd = open("a.txt", O_RDWR); // 以读写模式打开文件
|
|||
|
if (fd < 0)
|
|||
|
{
|
|||
|
perror("open"); // 打开文件失败时打印错误信息
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
if (argc != 2)
|
|||
|
{
|
|||
|
perror("usage: ./a something"); // 如果命令行参数不正确,打印使用说明
|
|||
|
return -1;
|
|||
|
}
|
|||
|
const char *input_buf = argv[1]; // 获取用户输入的内容
|
|||
|
|
|||
|
off_t file_end = lseek(fd, 0, SEEK_END); // 将文件指针移动到文件末尾
|
|||
|
|
|||
|
char buf[1024] = "";
|
|||
|
sprintf(buf, "%s", input_buf); // 将用户输入的内容存储在缓冲区中
|
|||
|
int wrt = write(fd, buf, strlen(buf)); // 使用strlen获取写入的字节数
|
|||
|
if (wrt < 0)
|
|||
|
{
|
|||
|
perror("write"); // 写入文件失败时打印错误信息
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
if (close(fd) < 0)
|
|||
|
{
|
|||
|
perror("close"); // 关闭文件失败时打印错误信息
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|