在上一篇中学习了一下open函数的基本用法,这里就要练习一下。计算机就是要实践嘛。

用open创建一个文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h> int main() {
int fd;
fd = open("abc", O_CREAT, );
printf("fd=%d\n", fd); return ;
}

open函数第二个参数是文件打开的标志,比如只读(O_RDONLY)等,还有副标志(O_CREAT,O_TRUNC)等。主标志是互斥的,但是我不知道居然可以不指定主标志,而只用副标志。

然后第三个参数指定了创建文件的权限位。

open()一个文件,返回的描述符从3开始增加(0,1,2分别是标准输出,标准输入和标准错误)

由于umask一开始是022(我用的是root),所以创建出来的权限不是777,而是755,设置umask为000之后再执行以下创建出的abc的权限位就是777了。

传入参数作为文件名

/*
* open a file with pathname from arguments
* tuhooo
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h> int main(int argc, char *argv[]) { int fd; if(argc < ) {
printf("usage: ./open filename\n");
exit();
} if((fd = open(argv[], O_CREAT | O_RDWR, )) == -) {
printf("file open error!\n");
exit();
} printf("fd = %d\n", fd);
}

原来O_CREAT如果在文件存在的时候不会去创建的,我还以为会把原来文件的内容清空呢。

果然在标志位加上O_TRUNC之后文件的内容就被清空掉了。

直接在权限位写数字是不是有点硬编码了。

open一个文件,不存在则创建并写东西

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h> int main(int argc, char *argv[]) { int fd;
char buf[] = "hello, world\nthis is first sentence I write to this file"; /* argc */
if(argc < ) {
printf("./open filename\n");
exit();
} /* if open file correctly */
if((fd = open(argv[], O_CREAT | O_RDWR, )) == -) {
printf("open file error\n");
exit();
} /* write something */
write(fd, buf, strlen(buf));
printf("fd = %d\n", fd);
/* close fd */
close(fd);
return ;
}

这个例子看上去还挺简单的,就是加了一个write函数在这里了。

好像这就把open函数学完了,掌握了这几个例子,打开或者创建文件就不是问题啦。

原文:https://blog.csdn.net/tengfei_scut/article/details/70213099

Unix系统编程(二)open的练习的更多相关文章

  1. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  2. 《Linux/Unix系统编程手册》读书笔记6

    <Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...

  3. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...

  4. 《Linux/Unix系统编程手册》读书笔记1

    <Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...

  5. 《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll

    关键词:fasync_helper.kill_async.sigsuspend.sigaction.fcntl.F_SETOWN_EX.F_SETSIG.select().poll().poll_wa ...

  6. 《Linux/Unix系统编程手册》读书笔记 目录

    <Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) ...

  7. 《Linux/Unix系统编程手册》读书笔记9(文件属性)

    <Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...

  8. 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

    <Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...

  9. 《Linux/Unix系统编程手册》读书笔记4

    <Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...

  10. 《Linux/Unix系统编程手册》读书笔记3

    <Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此 ...

随机推荐

  1. http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

    http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

  2. Maven+SpringMVC+Freemarker入门Demo

    1 参考http://blog.csdn.net/haishu_zheng/article/details/51490299,用第二种方法创建一个名为mavenspringmvcfreemarker的 ...

  3. js 实现存储Map 结构的数据

    <script type="text/javascript"> function Map() { var struct = function(key, value) { ...

  4. 在笛卡尔坐标系上描绘函数 y=4x^2-2/4x-3

    代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...

  5. 十大迷你iPhone天气应用

    来源:GBin1.com 天气特别是指大气情况这样的状态通常包括温度,风,云,湿度和降雨等.上述情况下的天气状况很大程度影响了我们的生活和每天的日常活动.天气可能会经常出乎意料,所以往往希望能够准确提 ...

  6. linux最常用命令整理

    linux vim命令跳转到文档开头或末尾 gg:命令将光标移动到文档开头 G:命令将光标移动到文档末尾 <hr/> 网络 # ifconfig # 查看所有网络接口的属性 # iptab ...

  7. Apatche httpd + Django + Mysql web server 搭建

    Required: httpd: 2.4.18 django : 1.8.7 mysql: 5.7.10 MySQL-python: 1.2.3 mod_wsgi: 4.4.21 Offical Do ...

  8. MVC 强类型传值Model。和弱类型传值ViewData[&quot;&quot;]。及用EF进行增删查改(母版页的使用)

    <1> 控制器 </pre><pre name="code" class="csharp">using MvcTest.Mo ...

  9. 【VBA编程】14.操作工作簿对象

    [访问工作簿] 对已经打开的工作簿,可以通过使用索引号来访问工作簿,也可以通过名称来访问工作簿 [代码区域] Sub 访问工作簿() Dim counter As Integer counter = ...

  10. 使用 WinEdt 来写中文文章or 建模论文

    找了几乎两个小时…… 后来发现… WinEdt 是可以用来写中文文章的…而并非只能英文文章或演示文稿… \documentclass{article} \usepackage{CJK} \begin{ ...