日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SIO包是什么

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SIO包是什么 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SIO包是什么

首先SIO包并不是一個標準庫中的函數集合,這是CSAPP中為了方便樣例講解而創建的一個代碼庫中的一些函數的集合,我們的linux中默認肯定是沒有的 需要我們自己去導入,怎么導入呢,其實很簡單,就是把代碼拉下來放到/usr/include這個目錄當中,然后當我們需要使用時就可以當做一般的函數庫來使用了

這是csapp.h的源碼
這是csapp.c的源碼

SIO包中的函數

平時能用的上的函數就是這些

ssize_t Sio_putl(long v); ssize_t Sio_puts(char s[]) void Sio_error(char s[])

Sio_putl
打印一個數字

Sio_puts
打印一個字符串

Sio_error
打印一條錯誤消息并終止程序

SIO包中的函數的作用

你一定很奇怪為什么我們有封裝好的標準輸入輸出函數 為什么還需要這樣幾個奇怪的函數呢 這就牽扯到了另外一個問題
編寫安全的信號處理函數

SIO包的源碼

/************************************************************** The Sio (Signal-safe I/O) package - simple reentrant output* functions that are safe for signal handlers.*************************************************************//* Private sio functions *//* $begin sioprivate */ /* sio_reverse - Reverse a string (from K&R) */ static void sio_reverse(char s[]) {int c, i, j;for (i = 0, j = strlen(s)-1; i < j; i++, j--) {c = s[i];s[i] = s[j];s[j] = c;} }/* sio_ltoa - Convert long to base b string (from K&R) */ static void sio_ltoa(long v, char s[], int b) {int c, i = 0;int neg = v < 0;if (neg)v = -v;do { s[i++] = ((c = (v % b)) < 10) ? c + '0' : c - 10 + 'a';} while ((v /= b) > 0);if (neg)s[i++] = '-';s[i] = '\0';sio_reverse(s); }/* sio_strlen - Return length of string (from K&R) */ static size_t sio_strlen(char s[]) {int i = 0;while (s[i] != '\0')++i;return i; } /* $end sioprivate *//* Public Sio functions */ /* $begin siopublic */ssize_t sio_puts(char s[]) /* Put string */ {return write(STDOUT_FILENO, s, sio_strlen(s)); //line:csapp:siostrlen }ssize_t sio_putl(long v) /* Put long */ {char s[128];sio_ltoa(v, s, 10); /* Based on K&R itoa() */ //line:csapp:sioltoareturn sio_puts(s); }void sio_error(char s[]) /* Put error message and exit */ {sio_puts(s);_exit(1); //line:csapp:sioexit } /* $end siopublic *//******************************** Wrappers for the SIO routines******************************/ ssize_t Sio_putl(long v) {ssize_t n;if ((n = sio_putl(v)) < 0)sio_error("Sio_putl error");return n; }ssize_t Sio_puts(char s[]) {ssize_t n;if ((n = sio_puts(s)) < 0)sio_error("Sio_puts error");return n; }void Sio_error(char s[]) {sio_error(s); }

總結

以上是生活随笔為你收集整理的SIO包是什么的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。