系統呼叫中,如果要和系統命令進行多次互動,那麼system函式和popen都不能勝任,popen是單向管道.
要麼從中獲取標準出,要麼向其寫入標準輸入.所以用fork子程序和父程序利用pipe來進行雙向通訊才
能解決.
以修改使用者密碼為例,當然直接執行echo mypwd|passwd myname --stdin是可以的,但為了說明
向被呼叫的子程序傳遞輸入,我讓子程序執行 passwd my name --stdin,然後從標準輸入中獲取密碼.
父程序通過管道向其輸入密碼.然後等待子程序執行完成後,獲取子程序的標準輸出.來判斷是否更新成功.
#include
#include
#include
char passwd = "abcd1234/n";
main()
}exit(0);
}else
}
系統呼叫中與被呼叫的命令互動方式
系統呼叫中,如果要和系統命令進行多次互動,那麼system函式和popen都不能勝任,popen是單向管道.要麼從中獲取標準出,要麼向其寫入標準輸入.所以用fork子程序和父程序利用pipe來進行雙向通訊才 能解決.以修改使用者密碼為例,當然直接執行echo mypwd passwd myname ...
被中斷的系統呼叫
我們知道系統呼叫一旦阻塞,當訊號到來是會中斷此系統呼叫執行的,但是如下情況是不會對系統呼叫產生影響 1.單個程序阻塞訊號不會對後續系統呼叫產生中斷行為。2.執行緒中通過pthread sigmask阻塞訊號後,對該程序傳送的訊號是不影響該執行緒的系統呼叫的,會被傳送到其他執行緒處理。對於阻塞的訊號,...
C 之 main函式的呼叫與被呼叫
main函式能呼叫自身嗎?其他函式能呼叫main函式麼?下面先看一段有意思的程式,乙個簡潔有趣的列印菱形的程式。cpp view plain copy intline 1 intmain 效果圖如下 首先說一下 s 的用法,即 是用乙個int引數來代替,比如 printf s n 5,def 就相當...