博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 编程笔记 2
阅读量:7281 次
发布时间:2019-06-30

本文共 3783 字,大约阅读时间需要 12 分钟。

1.使用create建立文件:

#include 
#include
#include
#include
int main() { int res = creat("./file.txt", 0700); if (res == -1) { perror("Create File Error!"); } else { printf("Create OK!\n"); } return 0;}

2.从输入到输出:

// 从stdin到sdtout#include 
#include
int main (int argc, char *argv[]){ int c; while ((c = getchar()) != EOF) { putchar(c); } return 0;}

3.简单实现who命令:

#include 
#include
#include
#include
#include
#include
#define SHOWHOSTvoid show_info(struct utmp* user_record);void login_time(long *num_time);void show_info(struct utmp* user_record) { if (user_record->ut_type != USER_PROCESS) { return ; } printf("-------------------\n"); printf("User Name is: %10s\n", user_record->ut_name); printf("User CMD is: %10s\n", user_record->ut_line); login_time(&(user_record->ut_time)); #ifdef SHOWHOST printf("User Host is: %s\n", user_record->ut_host); #endif printf("\n");}void login_time(long *num_time) { char *timestr; timestr = ctime(num_time); printf("User login time is: %30s\n", timestr);}int main() { struct utmp current_record; int record_len = sizeof(current_record); int user_info_fd = -1; // user info in the utmp if ((user_info_fd = open(UTMP_FILE, O_RDONLY)) == -1) { perror("read file error!"); exit(1); } while (record_len == (read(user_info_fd, &current_record, record_len))) { show_info(&current_record); } close(user_info_fd); return 0;}

 

4.简单实现cp命令:

#include 
#include
#include
#include
#define BUFFERSIZE 4096#define FILEMODE 0700 // 111 000 000 User all pervoid opps(char *file, char* argv);void opps(char *file, char* argv) { fprintf(stderr, "Error : %s", file); perror(argv); exit(1);}int main(int argc, char* argv[]) { int in_fd = -1; int out_fd = -1; int n_chars = -1; char buf[BUFFERSIZE]; if (argc != 3) { fprintf(stderr, "Usage: cp source dest\n"); exit(1); } if ((in_fd = open(argv[1], O_RDONLY)) == -1) { opps("Open First File Error", argv[1]); } if ((out_fd = creat(argv[2], FILEMODE)) == -1) { opps("Creat Second File Error", argv[2]); } while ((n_chars = read(in_fd, buf, BUFFERSIZE)) > 0) { if (n_chars != write(out_fd, buf, n_chars)) { opps("Write Error!", argv[2]); } } if (-1 == n_chars) { opps("Read Error!", argv[1]); } if (close(in_fd) == -1 || close(out_fd)) { opps("Close Error!", " "); } return 0;}

 

5.使用不同缓冲区的cp实验:

使用python得到5M多的一个文件

#!/usr/bin/env python#-*- coding:utf-8 -*-fd = open("./data", "w+");for i in xrange(500000):    fd.writelines("hello world!")fd.close()

分别使用1 4026 20000做为buf的cp实验:

 

使用缓冲区的利弊:

利:

1. 提高磁盘I/O效率
2. 优化磁盘的写操作
利弊:
如果不及时写入磁盘,会导致数据丢失。

可以使用sync 将缓冲区数据写入磁盘 通过

man sync 来查看详细说明

6.一个进程多次打开一个文件:

#include 
#include
#include
#include
#include
int main() { int read_fd = open("./data", O_RDONLY); int write_fd = open("./data", O_WRONLY); int read_again_fd = open("./data", O_RDWR); char buf[1024]; read(read_fd, buf, 1024); buf[strlen(buf) - 1] = '\0'; puts(buf); close(read_fd); char str[100] = "testing 123..."; write(write_fd, str, strlen(str)); close(write_fd); buf[0] = '\0'; read(read_again_fd, buf, 1024); buf[strlen(buf) - 1] = '\0'; puts(buf); close(read_again_fd); return 0;}

每次都从最开始读取。

转载于:https://www.cnblogs.com/impact-crusher/p/3421014.html

你可能感兴趣的文章
软件工程——课程评价
查看>>
OpenStack Placement Project
查看>>
微信支付问题
查看>>
购买类目的概率预测
查看>>
Ajax Step By Step2
查看>>
codeforces 701 B. Cells Not Under Attack
查看>>
当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)
查看>>
Creating a Custom Page Layout in SharePoint 2013
查看>>
mysql foreignkey
查看>>
Django 中的自定义分页标签
查看>>
[转]ASP.NET自定义控件复杂属性声明持久性浅析
查看>>
PAT (Basic Level) Practise (中文)-卡拉兹(Callatz)猜想
查看>>
第八周进度总结
查看>>
axios 注意点
查看>>
刷新ListView刷新时的闪烁问题
查看>>
cuda c例程学习——eigenvalues(1)
查看>>
通过本地文件数据库查询手机归属地
查看>>
uva 10152 ShellSort
查看>>
前端之放大镜
查看>>
民航飞机专业词汇
查看>>