linux c 创建c文件操作,linux c文件操作记录(open creat lseek read close)

linux下操作文件的练习,分为打开、写、读和关闭文件,特此记录一下内容和碰到的问题。

#include

#include

#include

int main(void)

{

//打开一个文件

int f;

f = open("test.log", O_RDWR | O_APPEND | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);

printf("%d\n", f);

//写

char wbuf[13] = "Hello world!\n";

write(f, wbuf, sizeof(wbuf));

//将文件偏移量移到文件开始

lseek(f, 0, SEEK_SET);

//读

char rbuf[12];

int size;

size = read(f, rbuf, sizeof(rbuf) - 1);

printf("%d\n", size);

rbuf[size] = '\0';

printf("%s\n", rbuf);

//关闭文件

close(f);

return 0;

}

打开文件函数open第二个参数表示打开文件的权限,其中

O_RDWR表示读写方式

O_APPEND表示已追加的方式进行写

O_CREAT表示文件不存在的时候会进行创建

第三个参数表示创建文件时文件的权限,其中

S_IRWXU表示user权限是rwx

S_IRWXG表示group权限为rwx

S_IRWXO表示other权限为rwx

当然这不是最后文件的权限,最后的文件权限还和umask有关,关于umask可以参考:linux中的umask含义理解。

写文件函数write指明写入的字符串和长度。写完文件后lseek函数将文件偏移量会在文件尾,下面读取文件的时候如果不将偏移量移到开头,则读不到内容。另外使用O_APPEND的方式打开文件也会使得偏移量指向文件尾。

读取文件指明接收的字符创和读取的长度。读取时发现一个乱码问题,是因为rbuf没有结束字符\0导致,所以这里只读取11个字符,最后一个字符定为\0表示结束。

最后关闭文件。

测试的过程中还碰到如下文件:

file/fnctl.c:14:2: warning: implicit declaration of function 'write' is invalid

in C99 [-Wimplicit-function-declaration]

write(f, buf, 12);

^

1 warning generated.

最后发现是因为没有

#include

所致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//1.创建文件file1,写入字符串“abcdefghijklmn”; //2.创建文件file2,写入字符串“ABCDEFGHIJKLMN”; //3.读取file1中的内容,写入file2,使file2中的字符串内容为“abcdefghijklmn ABCDEFGHIJKLMN” 创建文件,该文件具有用户读写权限。 //2.采用dup/dup2/fcntl复制一个新的文件描述符,通过新文件描述符向文件写入“class_name”字符串; //3.通过原有的文件描述符读取文件中的内容,并且打印显示; 1.输入文件名称,能够判断文件类型,判断实际用户对该文件具有哪些存取权限; ?2.要求打印出文件类型信息,inode节点编号,链接数目,用户id,组id,文件大小信息; ?3.修改文件的权限为当前用户读写,组内用户读写,组外用户无权限 新建文件,设置文件权限屏蔽字为0; 2.建立该文件的硬链接文件,打印硬链接文件的inode节点号和文件大小; ? 3.建立该文件的软链接文件,打印软链接文件的inode节点号和文件大小;打印软链接文件中的内容; 4.打印源文件的inode节点号,文件大小和链接数目; ? 5.调用unlink对源文件进行操作,打印源文件链接数目; .新建/home/user目录; 2.把当前工作路径移至/home/user目录; 3.打印当前工作路径; ?编写程序完成以下功能: ?1.递归遍历/home目录,打印出所有文件和子目录名称及节点号。 ?2.判断文件类型,如果是子目录,继续进行递归遍历,直到遍历完所有子目录为止

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值